From 9ef3ff7d66d024ca78ac4f214cc47bbdd773dd79 Mon Sep 17 00:00:00 2001 From: evlentev Date: Thu, 4 Apr 2019 17:34:36 +0300 Subject: [PATCH 01/15] wpf support --- FFImageLoading.sln | 108 ++++++ .../ImageLoading.Forms.Sample/Wpf/App.config | 6 + .../ImageLoading.Forms.Sample/Wpf/App.xaml | 9 + .../ImageLoading.Forms.Sample/Wpf/App.xaml.cs | 35 ++ .../Wpf/Assets/error.png | Bin 0 -> 2590 bytes .../Wpf/Assets/loading.png | Bin 0 -> 3820 bytes .../Wpf/Assets/sample.svg | 201 ++++++++++ .../FFImageLoading.Forms.Sample.Wpf.csproj | 137 +++++++ .../Wpf/MainWindow.xaml | 14 + .../Wpf/MainWindow.xaml.cs | 32 ++ .../Wpf/Properties/AssemblyInfo.cs | 55 +++ .../Wpf/Properties/Resources.Designer.cs | 71 ++++ .../Wpf/Properties/Resources.resx | 117 ++++++ .../Wpf/Properties/Settings.Designer.cs | 30 ++ .../Wpf/Properties/Settings.settings | 7 + .../CachedImageRenderer.cs | 350 ++++++++++++++++++ .../FFImageLoading.Forms.Wpf.csproj | 74 ++++ .../ImageSourceBinding.cs | 150 ++++++++ .../Properties/AssemblyInfo.cs | 36 ++ .../BlurredTransformation.cs | 126 +++++++ .../CircleTransformation.cs | 31 ++ .../ColorFillTransformation.cs | 47 +++ .../ColorSpaceTransformation.cs | 103 ++++++ .../CornerTransformType.cs | 31 ++ .../CornersTransformation.cs | 251 +++++++++++++ .../CropTransformation.cs | 125 +++++++ .../FFImageLoading.Transformations.Wpf.csproj | 72 ++++ .../FlipTransformation.cs | 66 ++++ .../FlipType.cs | 11 + .../GrayscaleTransformation.cs | 46 +++ .../Helpers/Helpers.cs | 12 + .../Properties/AssemblyInfo.cs | 36 ++ .../RotateTransformation.cs | 193 ++++++++++ .../RoundedTransformation.cs | 259 +++++++++++++ .../SepiaTransformation.cs | 55 +++ .../TintTransformation.cs | 109 ++++++ .../Cache/FFSourceBindingCache.cs | 53 +++ .../FFImageLoading.Wpf/Cache/IImageCache.cs | 8 + source/FFImageLoading.Wpf/Cache/ImageCache.cs | 110 ++++++ source/FFImageLoading.Wpf/Cache/LRUCache.cs | 182 +++++++++ .../Cache/SimpleDiskCache.cs | 343 +++++++++++++++++ .../Cache/WriteableBitmapLRUCache.cs | 24 ++ .../DataResolvers/DataResolverFactory.cs | 32 ++ .../DataResolvers/FileDataResolver.cs | 30 ++ .../DataResolvers/ResourceDataResolver.cs | 90 +++++ .../Decoders/BaseDecoder.cs | 39 ++ .../Extensions/ColorExtensions.cs | 86 +++++ .../Extensions/ImageExtensions.cs | 173 +++++++++ .../TaskParameterPlatformExtensions.cs | 131 +++++++ .../Extensions/UnitsExtensions.cs | 15 + .../Extensions/WriteableBitmapExtensions.cs | 47 +++ .../FFImageLoading.Wpf.csproj | 95 +++++ .../FFImageSourceBinding.cs | 64 ++++ .../FFImageLoading.Wpf/Helpers/ColorHolder.cs | 47 +++ .../FFImageLoading.Wpf/Helpers/MD5Helper.cs | 50 +++ .../Helpers/MainThreadDispatcher.cs | 87 +++++ .../FFImageLoading.Wpf/Helpers/MiniLogger.cs | 30 ++ .../Helpers/PlatformPerformance.cs | 27 ++ .../FFImageLoading.Wpf/Helpers/ScaleHelper.cs | 50 +++ source/FFImageLoading.Wpf/ImageService.cs | 141 +++++++ .../Properties/AssemblyInfo.cs | 36 ++ .../Targets/BitmapTarget.cs | 35 ++ .../FFImageLoading.Wpf/Targets/ImageTarget.cs | 106 ++++++ .../Transformations/TransformationBase.cs | 21 ++ .../FFImageLoading.Wpf/Work/BitmapHolder.cs | 87 +++++ .../Work/PlatformImageLoaderTask.cs | 122 ++++++ 66 files changed, 5366 insertions(+) create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/App.config create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/App.xaml create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/App.xaml.cs create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/Assets/error.png create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/Assets/loading.png create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/Assets/sample.svg create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml.cs create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/Properties/AssemblyInfo.cs create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.Designer.cs create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.resx create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.Designer.cs create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.settings create mode 100644 source/FFImageLoading.Forms.Wpf/CachedImageRenderer.cs create mode 100644 source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj create mode 100644 source/FFImageLoading.Forms.Wpf/ImageSourceBinding.cs create mode 100644 source/FFImageLoading.Forms.Wpf/Properties/AssemblyInfo.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/BlurredTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/CircleTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/ColorFillTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/ColorSpaceTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/CornerTransformType.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/CornersTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/CropTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/FFImageLoading.Transformations.Wpf.csproj create mode 100644 source/FFImageLoading.Transformations.Wpf/FlipTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/FlipType.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/GrayscaleTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/Helpers/Helpers.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/Properties/AssemblyInfo.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/RotateTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/RoundedTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/SepiaTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/TintTransformation.cs create mode 100644 source/FFImageLoading.Wpf/Cache/FFSourceBindingCache.cs create mode 100644 source/FFImageLoading.Wpf/Cache/IImageCache.cs create mode 100644 source/FFImageLoading.Wpf/Cache/ImageCache.cs create mode 100644 source/FFImageLoading.Wpf/Cache/LRUCache.cs create mode 100644 source/FFImageLoading.Wpf/Cache/SimpleDiskCache.cs create mode 100644 source/FFImageLoading.Wpf/Cache/WriteableBitmapLRUCache.cs create mode 100644 source/FFImageLoading.Wpf/DataResolvers/DataResolverFactory.cs create mode 100644 source/FFImageLoading.Wpf/DataResolvers/FileDataResolver.cs create mode 100644 source/FFImageLoading.Wpf/DataResolvers/ResourceDataResolver.cs create mode 100644 source/FFImageLoading.Wpf/Decoders/BaseDecoder.cs create mode 100644 source/FFImageLoading.Wpf/Extensions/ColorExtensions.cs create mode 100644 source/FFImageLoading.Wpf/Extensions/ImageExtensions.cs create mode 100644 source/FFImageLoading.Wpf/Extensions/TaskParameterPlatformExtensions.cs create mode 100644 source/FFImageLoading.Wpf/Extensions/UnitsExtensions.cs create mode 100644 source/FFImageLoading.Wpf/Extensions/WriteableBitmapExtensions.cs create mode 100644 source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj create mode 100644 source/FFImageLoading.Wpf/FFImageSourceBinding.cs create mode 100644 source/FFImageLoading.Wpf/Helpers/ColorHolder.cs create mode 100644 source/FFImageLoading.Wpf/Helpers/MD5Helper.cs create mode 100644 source/FFImageLoading.Wpf/Helpers/MainThreadDispatcher.cs create mode 100644 source/FFImageLoading.Wpf/Helpers/MiniLogger.cs create mode 100644 source/FFImageLoading.Wpf/Helpers/PlatformPerformance.cs create mode 100644 source/FFImageLoading.Wpf/Helpers/ScaleHelper.cs create mode 100644 source/FFImageLoading.Wpf/ImageService.cs create mode 100644 source/FFImageLoading.Wpf/Properties/AssemblyInfo.cs create mode 100644 source/FFImageLoading.Wpf/Targets/BitmapTarget.cs create mode 100644 source/FFImageLoading.Wpf/Targets/ImageTarget.cs create mode 100644 source/FFImageLoading.Wpf/Transformations/TransformationBase.cs create mode 100644 source/FFImageLoading.Wpf/Work/BitmapHolder.cs create mode 100644 source/FFImageLoading.Wpf/Work/PlatformImageLoaderTask.cs diff --git a/FFImageLoading.sln b/FFImageLoading.sln index 38646eb5e..e2abc1fce 100644 --- a/FFImageLoading.sln +++ b/FFImageLoading.sln @@ -130,6 +130,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Mac.Sample", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.WinUWP", "samples\ImageLoading.Forms.Sample\WinUWP\FFImageLoading.Forms.Sample.WinUWP.csproj", "{8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Wpf", "source\FFImageLoading.Forms.Wpf\FFImageLoading.Forms.Wpf.csproj", "{0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Wpf", "source\FFImageLoading.Transformations.Wpf\FFImageLoading.Transformations.Wpf.csproj", "{A63B1175-5FB5-4A9C-BCC5-8AC091876D04}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Wpf", "source\FFImageLoading.Wpf\FFImageLoading.Wpf.csproj", "{DC06C582-6C7E-4018-A752-FEB528C65F7E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Wpf", "samples\ImageLoading.Forms.Sample\Wpf\FFImageLoading.Forms.Sample.Wpf.csproj", "{9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}" +EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution source\FFImageLoading.Cross\FFImageLoading.Cross.projitems*{1597f7d4-432c-4f26-b508-0f6faf0b9711}*SharedItemsImports = 4 @@ -143,6 +151,7 @@ Global source\FFImageLoading.Svg.Forms.Shared\FFImageLoading.Svg.Forms.Shared.projitems*{6d4f9dfa-012e-4966-a6e8-01c3464b537e}*SharedItemsImports = 4 source\FFImageLoading.Cross\FFImageLoading.Cross.projitems*{74bf9402-3e13-4003-8923-bc20a1294ce2}*SharedItemsImports = 4 source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{74bf9402-3e13-4003-8923-bc20a1294ce2}*SharedItemsImports = 4 + source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{dc06c582-6c7e-4018-a752-feb528c65f7e}*SharedItemsImports = 4 source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{e72ac4ed-03a8-465c-95a2-38b0544b37db}*SharedItemsImports = 13 EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -1265,6 +1274,102 @@ Global {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.ActiveCfg = Release|x86 {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.Build.0 = Release|x86 {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.Deploy.0 = Release|x86 + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|ARM.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|ARM.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhone.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x64.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x64.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x86.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x86.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|Any CPU.Build.0 = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|ARM.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|ARM.Build.0 = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhone.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhone.Build.0 = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x64.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x64.Build.0 = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x86.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x86.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|ARM.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|ARM.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhone.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x64.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x64.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x86.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x86.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|Any CPU.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|ARM.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|ARM.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhone.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhone.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x64.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x64.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x86.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x86.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|ARM.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|ARM.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhone.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x64.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x64.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x86.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x86.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|Any CPU.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|ARM.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|ARM.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhone.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhone.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x64.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x64.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x86.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x86.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|ARM.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|ARM.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhone.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x64.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x64.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x86.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x86.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|Any CPU.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|ARM.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|ARM.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhone.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhone.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x64.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x64.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x86.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1314,6 +1419,9 @@ Global {01B928BA-5E3B-46C6-B172-624A60ECC534} = {B48F3C95-B33F-4EF5-B223-06356D749A80} {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B} = {B48F3C95-B33F-4EF5-B223-06356D749A80} {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5} = {F7C14B24-556B-413B-B418-4CD194766A26} + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {4BF56189-8DC5-41A9-9440-3C7B9F57E151} diff --git a/samples/ImageLoading.Forms.Sample/Wpf/App.config b/samples/ImageLoading.Forms.Sample/Wpf/App.config new file mode 100644 index 000000000..787dcbecc --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Wpf/App.xaml b/samples/ImageLoading.Forms.Sample/Wpf/App.xaml new file mode 100644 index 000000000..fd0965690 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/samples/ImageLoading.Forms.Sample/Wpf/App.xaml.cs b/samples/ImageLoading.Forms.Sample/Wpf/App.xaml.cs new file mode 100644 index 000000000..703fcfe00 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/App.xaml.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using System.Windows; + +namespace Wpf +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + protected override void OnStartup(StartupEventArgs e) + { + base.OnStartup(e); + FFImageLoading.Forms.Platform.CachedImageRenderer.Init(); + + var config = new FFImageLoading.Config.Configuration() + { + VerboseLogging = true, + VerbosePerformanceLogging = true, + VerboseMemoryCacheLogging = true, + VerboseLoadingCancelledLogging = true, + }; + FFImageLoading.ImageService.Instance.Initialize(config); + List assembliesToInclude = new List(); + assembliesToInclude.Add(typeof(FFImageLoading.Forms.Platform.CachedImageRenderer).GetTypeInfo().Assembly); + Xamarin.Forms.Forms.Init(assembliesToInclude); + } + } +} diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Assets/error.png b/samples/ImageLoading.Forms.Sample/Wpf/Assets/error.png new file mode 100644 index 0000000000000000000000000000000000000000..b791d43921a0fb21bf202d39dd36bf770868c7b8 GIT binary patch literal 2590 zcmbW2`8O1b8^+yRU1P6=u4=e4NkoYj)1WBHlB{DH8fy(%vlUq~RH!TaUJSVmCRuW2 zgzQ<088LTEWy_2u%UB!lb^nC#_jAsB-gBOF-sh+HInN_g6MYduX+b_dJ`sZ}dS-ll zzbOAVh#lLCNx^;n?e+VeOV~T+-fnk-@P4j*7hJrZTxAVzX$^w}T4CDJKGQ$AJfh)-N1;lY#ISWrqs)eaylq98N zh%mH^Y3{Qy_mC5k8&Ti9SQe^(0k^uvb*{)TP|FamYhb2oAuFc5NxFMS<&!e{NU6KF z-{5~ILfdA`S0(L!z)IgKja9m=9l@elBvftne1-#JrVKYUw-7bGGls1tdPZ_=f!4a^ zU8L63_c{`Xq&=BZlMpEV8g=^wmQdASyzW`}dDX)^!Q0(%b$ND!-+34Bt3uYd(V8LT z#GoYWW?-Fog-q^EucP7Ed1E}ruX#lHcH)n=>g97)Oh*L`{yx#2BLP~+vyoPv+>eER zvE1H$Ru$rOr{JWN)7P-t#9Bs(^x2g`V_eIVJ&px3A}@oq9bNImfjAPyvtIw)^2`e= zbHr$nGE+|^2yt4p^NH1JQ)oYq3AV*U_j*fZpQRl(5X?xFnXk!H@5W*j41520 z3go6M_~E{MqHAN|)A}=>gf-l@%Tfx$!<`$}-)4;>=f7^)&*J7TL`c(LQE{>N{wdAv z$&%5}%F^$<*RJ3kNvX;4w{4&_Ox)Tp^Op{`eXRQeCnOvj>)*T5UiV_f~D z5=pa_v*zMRV~6ir3xCR|4Noy4Oy4?rOHx5LwW}D(O;t zR99PnZ%?Kah0S_-#s!)?4LlDd{b{^YCP$8}K*ik$Q}yg(J?!*RJc`HYQw+}(E@iSz zM*Xk-igAtgzM5W#s$ntAn>U6VyL}hL-dG;T7pktw?8M_;HFIXuvPA;qk}gd|^#+uP zCHzTIKDjo}D1Amz_WdK&L$rINeldB|QqNBplN`S=rikaBWq7-lpvaqBPY$b-mwH#w zCaWrLeUENPkPMeM#XjI0B$GPN(Du?JU`0@b!@nJMOM9)JCg;wrGWx;P&-!6Bdm90` zqODF2M>AA6^N0sB^?m$U(2o$}vW%jp{P4}JljIl^XtkwNzB#{&$V@&*R&_cUhVd5W zYmz(#RYyD0)8CYk922E`--%p7QdzIouIOU9ThIwtE zpshwe^%*TEac!_J{t{L!2Pdk|b*w`c$608Rg9z9^s0mg-#S4@@y4FJia6y-6^VgRU zsLT!SF`-h9aTVqCKvzPMj2y~3`{`4;XvxN zVlh?$L~fsF6)nfkt7s|Q6r0oIep6BThq~~_;MgIZ*x2gz!Pm;XPr(OzAG%N2`C}Iz zku6_PYBuJ|{)%Cxw`@$CmBI)@pp?^!y?mx@pieqifBMUrx#eWcu`^^R6$#RlFSE?q z9rJ{$jrJ}|U~Lda2-nh;8Tw(Es!c*4UYLFn{+&|EYkJ+gR!*xtCPio8jh^nsE2Gt! zYDb0c3{72ZCY-yqO175lLOX9XHD%A;$k#`&h+Pf;;O0&kaY50xY&$7(#w5eE`&PM& zZP{AnPXvc@#}!p-m0!O6`3m&sbG$n*EfQ6ht!{>KSFI1xwL2GdtPZ4}y4rE4yE7u_ zlIche$7X4cbHS^gj2(o7#RBf^YdA_rCv7Gnk&RG7)r;1*?XzkM z`&_#-t$!wt{epTKD|pYTlvwrJ;eoerdy!!b#U+GIit}ZiKaeuiCRL~UZ26JO%FWSY^n6dJ5mM!zn7SP63$JQ7GIeScS!{&u1`lkX*p9UL(`4Uu z`t_lUH*Qb5sEmi`$WOd6BJY@PIo6R@UqevZV|B9jx%mlY?3;>%4eCS`zu;)?wIrGG zwk)Zf^7E`oD;?=mMHI3D)43qtGPdnf&S71wO^9m1OCx+j2Z8sJ-^z#2jp32zu8`N` zz#gCumO3))lQc)pAzjFAkuj0%jx0q*j?wX$MpA_-c^Nbkch#*no6p<#| zEr`2UL|I%!^JjVSIN#ryMy|xq=+Z@)Ci8&-(J05wJ+;Q4A1{+VS5vS)Qw-|am5EuV!IN_XF7HcoKLGM(7o4x&o& zMdOH?dV3boACkf|% zsam?%^z@linsdr}iJL3wQ|I)w>U8q|S<@$A&kerd@E?&b#}5enSMvs!O!Uex-iZ1a D#?MkE literal 0 HcmV?d00001 diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Assets/loading.png b/samples/ImageLoading.Forms.Sample/Wpf/Assets/loading.png new file mode 100644 index 0000000000000000000000000000000000000000..3f9cde526f878c24ad42f298f65ce78390865707 GIT binary patch literal 3820 zcmc(iS635Sw}wG+Bi%-nCL)4`02=|7u1K#+2_e)_rAwENpdx~yNhnHh5)w*CK)L|} z1dIr1=)EQM9!em`ea`m$gzvjpV?ASzHQ$T5Zk`$Y#6XjSm6w%)fq_F?OU;OZff4x6 zIeYqd#h@Tu^Y_K$rw;Zr_HyzIg!(u#JaX`|bG)YQ0d;mXa)derc@rEJe|JPa(KAu+ z{=TrWxvyjPxg0a}#IkIBYW+o2bJ&}&<_;C6P*fvsvb}3|fxO-Ki(=(cMWda-;9d1C z6O^T0U9-XFBbx_2p^ zIQ(>0;SYG$H{y@Q!^7j5xlM>uW&Y>>%9`P|4eHkR!P3g^&hBAidbfXgBgn4Y&I98W zR1bBpE=K;u)QwKfY#3UW%`R+xF8@W{KSH7h(O*V&a8CW3nAqYbYL`V0Wi7gUjhk9y_G_pa)CU-0?@1C5{pIVni$F&_F zpFFiHGl8N&P}Cx2dw{g04Jt{?CVu$TlbBA3OX)PVLq*588{42x==9zJvYCBFLK-0^ z0U!UN>*VC*kwIZ$+0Rwe6w%)wc}iRDk;#jZmC+-Mfi7O==fI+Kl9ud6KIXY>@6=h@ zP!j%6L5z$nL)C;E;uwFnJG^E;#vKDUefDfrw4_t??$#lVva5Ty!y*beGUieU-xShn zwBC00ojPU9$Ois;3Q+lw0r)STjXd)&GFJYJ*BAi*BGW%_|Ea!Y_}{kQc#h%!5+cw1 zSHehiIe0lwvCFf=7RuUg({b-0?QpqjM?+1X*sK%(&F2pG)9_8i`4{A6oznBg)P_my z1;Nxzm$T)$p5V##K|aBB(q!iHgXQf^@}8@M#T`-OQp=7TOKXEriiR*|BgLefU=wmx zuh-p!sHXxxs?nNZWbPFi;Y*s>4lS7O8ZY zG&z(X*9~nG!eWl8Ffsql=`Gm+lY9W^4`^=Si}22I$++W(F{O!ic)fc?QN9Qc@iI|+n_r)Tq*~& ztdGAgsfiB^6nYeXnP1Q*)Y0Zs33a2>$hs+|z?KO72nD|hCzQmOhGHiak@cD2jfRGd zS7bSY%CKf*I!e9M=!2)+DS!=D4V)Q7sC|21y*dcIX<0!h>Wi>NO-#L2#mm9^?|UTK}@Uz3mHm05HQcfgK)vK0BW` z0tEK2BDL&4t~VS7e4X30J4+Z1L35GsQK<8guc03u2Fw9); zZZNfr%dGxX_M|z~MZjxC(Xm>~!Bk}K%jiO;cKyf55$?6M^)BVtH4Z*Ell10CH9HPh zRXzEp!QCh@185~XYziN$s9|!UOkDot*byrShPn3N^LsWP16amP5|1Rn zu!LZPo9BGwf`<0u7;^(Dgr|%`*69?s)s_uzuF>chjKU+}d}X18ise4+K=(w*Y|QYn zsO|6obD-Uc9A0xVqKuyBHE>~-`~Lhb@EmIQK&?AIvS=)UrD~3rrmj}(OC<#vX5xXkdDI^hRoxOvMpaQUV^uN_q;9~nk%)Z4=n zGf9OnWtz^-7YADFAZU(ZLHNFBsWIkM{$2~p!crm+qpnIZVN{f*HFzEYkpS+6O8Tv_ zh`wnF-IBc2!=GC#ksc4N_BB%gH8!rtDj7=~T({Nc&UD*lvQx?*lo|O9@kCz52`k2( ziTfML4R1DNtppn@yVh>-uAT=NDBH92J`!gIG!XexuOVLwH@ntVvSNxXZ!X5+`x)l% z;~2R~@`_Nds-1M@!HYRM3X={owgi zrE>3`%rT$P8Yem_n5ULv-~4-CVRLU5PQYUB7s$T9e4rfqFCd%&d;xQ_&M}p> zw_?sY5M`|WeZLB>`;0whbf^BqZn`Ags(K|`YqPhix7;b#rj0+0W72|d{bDON=QQ;3 z70rO@gkJ(xPLw^`jB58z2*)Z<^EM70!xyIlx(eE<;ntjA1!a}#V7%ZWWS zRyi!>49NCZ1~<4zfj(d=0q;eNoJJ6uY>$02G}2}I#=3a&v?&7RVjS%V^u3VPmQbTR z#BGZk-#K)9cK-SXugbc>28zBhfJ86Ly)VOXJ!uxslXc62!DfuEz)kW`6HaF2?~g&- zj^N1=UPJ82!4SW4YUvaM95wI~<7VE8#h7!p*;zT;D+w`)JsOQ9S>jzU+&%z>b8c2VA&-Q-r znpp5F3Blux4a`Q(d)b3di2-N6Xx?~ikNjZ5c~^LW>unmc4N2dU)D6gta%@?pDv5L+ zS`Kvo`syDJdLsxr5c1gUcVYsTj$Lm@Yp#1_6Vr%zyOj2ub-m@!_vn68wLQIy`zwZb z*3Q@wlxVHcDL@H`}VCtk`$DnR(S2x_B)|#2Qhl3oBVt<@_XPOZv(s~%( z6w|$syc`~*@i7)(9LrsF-?5kfr<;Jge_(Nvr>pv5$Ao9o8Sz`W$#d40M-6 z3s!E08Kw3V-4)6b_Hh1yqqfv7#U7c4v-=+2*=r1u+dm=cuixv6Oge8dZ9`Zp~iCg%Mr56)k}Evt{=_aE$zI;m>hNvX_!Ao6oYi3(9dZcSVO+!cfeIQgk7s6lvD=bpP%7TY>$GM@2g2zXH6vO0g9Pm>VXRq`9qRI z-c9&&bW_h8t(2y#5|nJS_Bk<1LOBUw342NfKqksFq9V#ZlBiCzs^Pa~PLTVbEcWC0 zgNc+e@6@09w8jJWh$o)uuT?`M)DJJK&t|^QX$iQ@aq5q-GyT!}vw!6O+#jnK`s4np uf298P|EoXap9SGR9faI|M`!t);hXTz(?qt2iQnrhgSNVXTDhui)c*h@t(V#W literal 0 HcmV?d00001 diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Assets/sample.svg b/samples/ImageLoading.Forms.Sample/Wpf/Assets/sample.svg new file mode 100644 index 000000000..4ab9b8eea --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Assets/sample.svg @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + all logos are copyright of their respective owners + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj b/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj new file mode 100644 index 000000000..37be0743b --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj @@ -0,0 +1,137 @@ + + + + + Debug + AnyCPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F} + WinExe + Wpf + Wpf + v4.7.1 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + 4.0 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + MainWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + 3.6.0.22065 + + + 3.6.0.22065 + + + + + {51ca3be2-df00-4f49-8054-e5c776992b61} + FFImageLoading + + + {0aa5a427-adc8-4685-aa8c-fea26ebd31f5} + FFImageLoading.Forms.Wpf + + + {3d6c1f12-68d7-44c2-a7de-8e7942627a01} + FFImageLoading.Forms + + + {a63b1175-5fb5-4a9c-bcc5-8ac091876d04} + FFImageLoading.Transformations.Wpf + + + {dc06c582-6c7e-4018-a752-feb528c65f7e} + FFImageLoading.Wpf + + + {3a682234-5918-4f58-b02b-598a59c6a7bd} + FFImageLoading.Forms.Sample + + + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml b/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml new file mode 100644 index 000000000..aa0b1c3c2 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml @@ -0,0 +1,14 @@ + + + + + + diff --git a/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml.cs b/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml.cs new file mode 100644 index 000000000..aa9dbb184 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using Xamarin.Forms.Platform.WPF; + +namespace Wpf +{ + /// + /// Interaction logic for MainWindow.xaml + /// + public partial class MainWindow : FormsApplicationPage + { + public MainWindow() + { + MinWidth = 1000; + MinHeight = 450; + InitializeComponent(); + LoadApplication(new FFImageLoading.Forms.Sample.App()); + } + } +} diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Properties/AssemblyInfo.cs b/samples/ImageLoading.Forms.Sample/Wpf/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..56a1c5331 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Wpf")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Wpf")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.Designer.cs b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.Designer.cs new file mode 100644 index 000000000..66bdd5844 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Wpf.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Wpf.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.resx b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.resx new file mode 100644 index 000000000..af7dbebba --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.Designer.cs b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.Designer.cs new file mode 100644 index 000000000..12a08fa37 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Wpf.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.settings b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.settings new file mode 100644 index 000000000..033d7a5e9 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Wpf/CachedImageRenderer.cs b/source/FFImageLoading.Forms.Wpf/CachedImageRenderer.cs new file mode 100644 index 000000000..a4c1384d3 --- /dev/null +++ b/source/FFImageLoading.Forms.Wpf/CachedImageRenderer.cs @@ -0,0 +1,350 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Forms.Args; +using FFImageLoading.Helpers; +using FFImageLoading.Work; +using System; +using System.ComponentModel; +using System.IO; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using Xamarin.Forms; +using Xamarin.Forms.Platform.WPF; +using Image = System.Windows.Controls.Image; +using Size = Xamarin.Forms.Size; + +namespace FFImageLoading.Forms.Platform +{ + /// + /// CachedImage Implementation + /// + //[Preserve(AllMembers = true)] + public class CachedImageRenderer : ViewRenderer + { + [RenderWith(typeof(CachedImageRenderer))] + internal class _CachedImageRenderer + { + } + + bool _isSizeSet; + private bool _measured; + private IScheduledWork _currentTask; + private ImageSourceBinding _lastImageSource; + private bool _isDisposed = false; + + /// + /// Used for registration with dependency service + /// + public static void Init() + { + CachedImage.IsRendererInitialized = true; +#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed + ScaleHelper.InitAsync(); +#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed + } + + public override SizeRequest GetDesiredSize(double widthConstraint, double heightConstraint) + { + var bitmapSource = Control.Source as BitmapSource; + + if (bitmapSource == null) + return new SizeRequest(); + + _measured = true; + + return new SizeRequest(new Size() + { + Width = bitmapSource.PixelWidth, + Height = bitmapSource.PixelHeight + }); + } + + protected override void OnElementChanged(ElementChangedEventArgs e) + { + base.OnElementChanged(e); + + if (Control == null && Element != null && !_isDisposed) + { + var control = new Image() + { + Stretch = GetStretch(Aspect.AspectFill), + }; + control.Loaded += OnImageOpened; + SetNativeControl(control); + + Control.HorizontalAlignment = HorizontalAlignment.Center; + Control.VerticalAlignment = VerticalAlignment.Center; + } + + if (e.OldElement != null) + { + e.OldElement.InternalReloadImage = null; + e.OldElement.InternalCancel = null; + e.OldElement.InternalGetImageAsJPG = null; + e.OldElement.InternalGetImageAsPNG = null; + } + + if (e.NewElement != null) + { + _isSizeSet = false; + e.NewElement.InternalReloadImage = new Action(ReloadImage); + e.NewElement.InternalCancel = new Action(CancelIfNeeded); + e.NewElement.InternalGetImageAsJPG = new Func>(GetImageAsJpgAsync); + e.NewElement.InternalGetImageAsPNG = new Func>(GetImageAsPngAsync); + + UpdateAspect(); + UpdateImage(Control, Element, e.OldElement); + } + } + + protected override void Dispose(bool disposing) + { + if (!_isDisposed) + { + _isDisposed = true; + if (Control != null) + { + Control.Loaded -= OnImageOpened; + } + CancelIfNeeded(); + } + + base.Dispose(disposing); + } + + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged(sender, e); + + if (e.PropertyName == CachedImage.SourceProperty.PropertyName) + { + UpdateImage(Control, Element, null); + } + else if (e.PropertyName == CachedImage.AspectProperty.PropertyName) + { + UpdateAspect(); + } + } + + void OnImageOpened(object sender, RoutedEventArgs routedEventArgs) + { + if (_measured) + { + ((IVisualElementController)Element)?.InvalidateMeasure(Xamarin.Forms.Internals.InvalidationTrigger.RendererReady); + } + } + + async void UpdateImage(Image imageView, CachedImage image, CachedImage previousImage) + { + CancelIfNeeded(); + + if (image == null || imageView == null || _isDisposed) + return; + + var ffSource = await ImageSourceBinding.GetImageSourceBinding(image.Source, image).ConfigureAwait(false); + if (ffSource == null) + { + if (_lastImageSource == null) + return; + + _lastImageSource = null; + imageView.Source = null; + return; + } + + if (previousImage != null && !ffSource.Equals(_lastImageSource)) + { + _lastImageSource = null; + imageView.Source = null; + } + + image.SetIsLoading(true); + + var placeholderSource = await ImageSourceBinding.GetImageSourceBinding(image.LoadingPlaceholder, image).ConfigureAwait(false); + var errorPlaceholderSource = await ImageSourceBinding.GetImageSourceBinding(image.ErrorPlaceholder, image).ConfigureAwait(false); + TaskParameter imageLoader; + image.SetupOnBeforeImageLoading(out imageLoader, ffSource, placeholderSource, errorPlaceholderSource); + + if (imageLoader != null) + { + var finishAction = imageLoader.OnFinish; + var sucessAction = imageLoader.OnSuccess; + + imageLoader.Finish((work) => + { + finishAction?.Invoke(work); + ImageLoadingSizeChanged(image, false); + }); + + imageLoader.Success((imageInformation, loadingResult) => + { + sucessAction?.Invoke(imageInformation, loadingResult); + _lastImageSource = ffSource; + }); + + imageLoader.LoadingPlaceholderSet(() => ImageLoadingSizeChanged(image, true)); + + if (!_isDisposed) + _currentTask = imageLoader.Into(imageView); + } + } + + void UpdateAspect() + { + if (Control == null || Element == null || _isDisposed) + return; + Control.Stretch = GetStretch(Element.Aspect); + } + + static Stretch GetStretch(Aspect aspect) + { + switch (aspect) + { + case Aspect.AspectFill: + return Stretch.UniformToFill; + case Aspect.Fill: + return Stretch.Fill; + default: + return Stretch.Uniform; + } + } + + async void ImageLoadingSizeChanged(CachedImage element, bool isLoading) + { + await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(() => + { + if (element != null && !_isDisposed) + { + if (!isLoading || !_isSizeSet) + { + ((IVisualElementController)element)?.InvalidateMeasure(Xamarin.Forms.Internals.InvalidationTrigger.RendererReady); + _isSizeSet = true; + } + + if (!isLoading) + element.SetIsLoading(isLoading); + } + }); + } + + void ReloadImage() + { + UpdateImage(Control, Element, null); + } + + void CancelIfNeeded() + { + try + { + _currentTask?.Cancel(); + } + catch (Exception) { } + } + + Task GetImageAsJpgAsync(GetImageAsJpgArgs args) + { + return GetImageAsByteAsync(new JpegBitmapEncoder(), args.Quality, args.DesiredWidth, args.DesiredHeight); + } + + Task GetImageAsPngAsync(GetImageAsPngArgs args) + { + return GetImageAsByteAsync(new PngBitmapEncoder(), 90, args.DesiredWidth, args.DesiredHeight); + } + + async Task GetImageAsByteAsync(BitmapEncoder encoder, int quality, int desiredWidth, int desiredHeight) + { + if (Control?.Source == null) + return null; + + var bitmap = Control.Source as WriteableBitmap; + + if (bitmap == null) + return null; + + //byte[] pixels = null; + //uint pixelsWidth = (uint)bitmap.PixelWidth; + //uint pixelsHeight = (uint)bitmap.PixelHeight; + + WriteableBitmap source; + if (desiredWidth != 0 || desiredHeight != 0) + { + double widthRatio = (double)desiredWidth / (double)bitmap.PixelWidth; + double heightRatio = (double)desiredHeight / (double)bitmap.PixelHeight; + + double scaleRatio = Math.Min(widthRatio, heightRatio); + + if (desiredWidth == 0) + scaleRatio = heightRatio; + + if (desiredHeight == 0) + scaleRatio = widthRatio; + + var tr = new TransformedBitmap(bitmap, new ScaleTransform(scaleRatio, scaleRatio)); + + var bmp = new MemoryStream(); + BitmapEncoder enc = new BmpBitmapEncoder(); + enc.Frames.Add(BitmapFrame.Create(tr)); + enc.Save(bmp); + bmp.Seek(0, SeekOrigin.Begin); + //pixels = new byte[bmp.Length]; + source = await bmp.ToWriteableBitmap(); + //await bmp.ReadAsync(pixels, 0, (int)bmp.Length); + } + else + { + //pixels = await GetBytesFromBitmapAsync(bitmap); + source = bitmap; + } + + using (var stream = new MemoryStream()) + { + if (encoder is JpegBitmapEncoder enc) + { + //var propertySet = new BitmapPropertySet(); + //var qualityValue = new BitmapTypedValue((double)quality / 100d, Windows.Foundation.PropertyType.Single); + //propertySet.Add("ImageQuality", qualityValue); + + //encoder = await BitmapEncoder.CreateAsync(format, stream, propertySet); + enc.QualityLevel = quality; + } + //else + //{ + // encoder = await BitmapEncoder.CreateAsync(format, stream); + //} + + encoder.Frames.Add(BitmapFrame.Create(source)); + encoder.Save(stream); + //encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, + // pixelsWidth, pixelsHeight, 96, 96, pixels); + //await encoder.FlushAsync(); + stream.Seek(0,SeekOrigin.Begin); + + var bytes = new byte[stream.Length]; + await stream.ReadAsync(bytes, 0,bytes.Length); + + return bytes; + } + } + + async Task GetBytesFromBitmapAsync(WriteableBitmap bitmap) + { + var width = bitmap.PixelWidth; + var height = bitmap.PixelHeight; + var stride = width * ((bitmap.Format.BitsPerPixel + 7) / 8); + + var bitmapData = new byte[height * stride]; + + bitmap.CopyPixels(bitmapData, stride, 0); + return bitmapData; + //byte[] tempPixels; + //using (var sourceStream = bitmap.PixelBuffer.AsStream()) + //{ + // tempPixels = new byte[sourceStream.Length]; + // await sourceStream.ReadAsync(tempPixels, 0, tempPixels.Length).ConfigureAwait(false); + //} + + //return tempPixels; + } + } +} diff --git a/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj b/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj new file mode 100644 index 000000000..8a03b2a45 --- /dev/null +++ b/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj @@ -0,0 +1,74 @@ + + + + + Debug + AnyCPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5} + Library + Properties + FFImageLoading.Forms.Platform + FFImageLoading.Forms.Platform + v4.7.1 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + {0ad3a755-399a-4527-a001-6192724c67bb} + FFImageLoading + + + {0e77b5d3-dba5-46d3-af16-7c209c952bd0} + FFImageLoading.Forms + + + {dc06c582-6c7e-4018-a752-feb528c65f7e} + FFImageLoading.Wpf + + + + + 3.6.0.22065 + + + 3.6.0.22065 + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Wpf/ImageSourceBinding.cs b/source/FFImageLoading.Forms.Wpf/ImageSourceBinding.cs new file mode 100644 index 000000000..1474281e4 --- /dev/null +++ b/source/FFImageLoading.Forms.Wpf/ImageSourceBinding.cs @@ -0,0 +1,150 @@ +using System; +using Xamarin.Forms; +using System.Threading.Tasks; +using System.IO; +using System.Threading; + +namespace FFImageLoading.Forms.Platform +{ + public class ImageSourceBinding : IImageSourceBinding + { + public ImageSourceBinding(FFImageLoading.Work.ImageSource imageSource, string path) + { + ImageSource = imageSource; + Path = path; + } + + public ImageSourceBinding(Func> stream) + { + ImageSource = FFImageLoading.Work.ImageSource.Stream; + Stream = stream; + } + + public FFImageLoading.Work.ImageSource ImageSource { get; private set; } + + public string Path { get; private set; } + + public Func> Stream { get; private set; } + + internal static async Task GetImageSourceBinding(ImageSource source, CachedImage element) + { + if (source == null) + { + return null; + } + + var uriImageSource = source as UriImageSource; + if (uriImageSource != null) + { + var uri = uriImageSource.Uri?.OriginalString; + if (string.IsNullOrWhiteSpace(uri)) + return null; + + return new ImageSourceBinding(Work.ImageSource.Url, uri); + } + + var fileImageSource = source as FileImageSource; + if (fileImageSource != null) + { + if (string.IsNullOrWhiteSpace(fileImageSource.File)) + return null; + + if (!string.IsNullOrWhiteSpace(System.IO.Path.GetDirectoryName(fileImageSource.File)) && File.Exists(fileImageSource.File)) + return new ImageSourceBinding(FFImageLoading.Work.ImageSource.Filepath, fileImageSource.File); + + return new ImageSourceBinding(FFImageLoading.Work.ImageSource.ApplicationBundle, fileImageSource.File); + } + + var streamImageSource = source as StreamImageSource; + if (streamImageSource != null) + { + return new ImageSourceBinding(streamImageSource.Stream); + } + + var embeddedResoureSource = source as EmbeddedResourceImageSource; + if (embeddedResoureSource != null) + { + var uri = embeddedResoureSource.Uri?.OriginalString; + if (string.IsNullOrWhiteSpace(uri)) + return null; + + return new ImageSourceBinding(FFImageLoading.Work.ImageSource.EmbeddedResource, uri); + } + + var dataUrlSource = source as DataUrlImageSource; + if (dataUrlSource != null) + { + if (string.IsNullOrWhiteSpace(dataUrlSource.DataUrl)) + return null; + + return new ImageSourceBinding(FFImageLoading.Work.ImageSource.Url, dataUrlSource.DataUrl); + } + + var vectorSource = source as IVectorImageSource; + if (vectorSource != null) + { + if (vectorSource.VectorHeight == 0 && vectorSource.VectorHeight == 0) + { + if (element.Height > 0d && !double.IsInfinity(element.Height)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorHeight = (int)element.Height; + } + else if (element.Width > 0d && !double.IsInfinity(element.Width)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorWidth = (int)element.Width; + } + else if (element.HeightRequest > 0d && !double.IsInfinity(element.HeightRequest)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorHeight = (int)element.HeightRequest; + } + else if (element.WidthRequest > 0d && !double.IsInfinity(element.WidthRequest)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorWidth = (int)element.WidthRequest; + } + else if (element.MinimumHeightRequest > 0d && !double.IsInfinity(element.MinimumHeightRequest)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorHeight = (int)element.MinimumHeightRequest; + } + else if (element.MinimumWidthRequest > 0d && !double.IsInfinity(element.MinimumWidthRequest)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorWidth = (int)element.MinimumWidthRequest; + } + } + + return await GetImageSourceBinding(vectorSource.ImageSource, element).ConfigureAwait(false); + } + + throw new NotImplementedException("ImageSource type not supported"); + } + + public override bool Equals(object obj) + { + var item = obj as ImageSourceBinding; + + if (item == null) + { + return false; + } + + return this.ImageSource == item.ImageSource && this.Path == item.Path && this.Stream == item.Stream; + } + + public override int GetHashCode() + { + unchecked + { + int hash = 17; + hash = hash * 23 + this.ImageSource.GetHashCode(); + hash = hash * 23 + Path.GetHashCode(); + hash = hash * 23 + Stream.GetHashCode(); + return hash; + } + } + } +} \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Wpf/Properties/AssemblyInfo.cs b/source/FFImageLoading.Forms.Wpf/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..daf5ac6f9 --- /dev/null +++ b/source/FFImageLoading.Forms.Wpf/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FFImageLoading.Forms.Wpf")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FFImageLoading.Forms.Wpf")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("0aa5a427-adc8-4685-aa8c-fea26ebd31f5")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/FFImageLoading.Transformations.Wpf/BlurredTransformation.cs b/source/FFImageLoading.Transformations.Wpf/BlurredTransformation.cs new file mode 100644 index 000000000..f957186e3 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/BlurredTransformation.cs @@ -0,0 +1,126 @@ +using System; +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class BlurredTransformation : TransformationBase + { + public BlurredTransformation() + { + Radius = 20d; + } + + public BlurredTransformation(double radius) + { + Radius = radius; + } + + public double Radius { get; set; } + + public override string Key + { + get { return string.Format("BlurredTransformation,radius={0}", Radius); } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, ImageSource source, bool isPlaceholder, string key) + { + + ToLegacyBlurred(bitmapSource, (int)Radius); + + return bitmapSource; + } + + // Source: http://incubator.quasimondo.com/processing/superfast_blur.php + public static void ToLegacyBlurred(BitmapHolder source, int radius) + { + int w = source.Width; + int h = source.Height; + int wm = w - 1; + int hm = h - 1; + int wh = w * h; + int div = radius + radius + 1; + int[] r = new int[wh]; + int[] g = new int[wh]; + int[] b = new int[wh]; + int rsum, gsum, bsum, x, y, i, yp, yi, yw; + int[] vmin = new int[Math.Max(w, h)]; + int[] vmax = new int[Math.Max(w, h)]; + + int[] dv = new int[256 * div]; + for (i = 0; i < 256 * div; i++) + { + dv[i] = (i / div); + } + + yw = yi = 0; + + for (y = 0; y < h; y++) + { + rsum = gsum = bsum = 0; + for (i = -radius; i <= radius; i++) + { + var p = source.GetPixel(yi + Math.Min(wm, Math.Max(i, 0))); + rsum += p.R; + gsum += p.G; + bsum += p.B; + } + for (x = 0; x < w; x++) + { + + r[yi] = dv[rsum]; + g[yi] = dv[gsum]; + b[yi] = dv[bsum]; + + if (y == 0) + { + vmin[x] = Math.Min(x + radius + 1, wm); + vmax[x] = Math.Max(x - radius, 0); + } + var p1 = source.GetPixel(yw + vmin[x]); + var p2 = source.GetPixel(yw + vmax[x]); + + rsum += p1.R - p2.R; + gsum += p1.G - p2.G; + bsum += p1.B - p2.B; + yi++; + } + yw += w; + } + + for (x = 0; x < w; x++) + { + rsum = gsum = bsum = 0; + yp = -radius * w; + for (i = -radius; i <= radius; i++) + { + yi = Math.Max(0, yp) + x; + rsum += r[yi]; + gsum += g[yi]; + bsum += b[yi]; + yp += w; + } + yi = x; + for (y = 0; y < h; y++) + { + // Preserve alpha channel: ( 0xff000000 & pix[yi] ) + var oldColor = source.GetPixel(yi); + var newColor = new ColorHolder(oldColor.A, dv[rsum], dv[gsum], dv[bsum]); + source.SetPixel(yi, newColor); + if (x == 0) + { + vmin[y] = Math.Min(y + radius + 1, hm) * w; + vmax[y] = Math.Max(y - radius, 0) * w; + } + var p1 = x + vmin[y]; + var p2 = x + vmax[y]; + + rsum += r[p1] - r[p2]; + gsum += g[p1] - g[p2]; + bsum += b[p1] - b[p2]; + + yi += w; + } + } + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/CircleTransformation.cs b/source/FFImageLoading.Transformations.Wpf/CircleTransformation.cs new file mode 100644 index 000000000..e5e2a68e7 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/CircleTransformation.cs @@ -0,0 +1,31 @@ +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class CircleTransformation : TransformationBase + { + public CircleTransformation() : this(0d, null) + { + } + + public CircleTransformation(double borderSize, string borderHexColor) + { + BorderSize = borderSize; + BorderHexColor = borderHexColor; + } + + public double BorderSize { get; set; } + public string BorderHexColor { get; set; } + + + public override string Key + { + get { return string.Format("CircleTransformation,borderSize={0},borderHexColor={1}", BorderSize, BorderHexColor); } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return RoundedTransformation.ToRounded(bitmapSource, 0, 1f, 1f, BorderSize, BorderHexColor); + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/ColorFillTransformation.cs b/source/FFImageLoading.Transformations.Wpf/ColorFillTransformation.cs new file mode 100644 index 000000000..d82eb2295 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/ColorFillTransformation.cs @@ -0,0 +1,47 @@ +using System; +using FFImageLoading.Work; +using FFImageLoading.Extensions; + +namespace FFImageLoading.Transformations +{ + public class ColorFillTransformation : TransformationBase + { + public ColorFillTransformation() : this("#000000") + { + } + + public ColorFillTransformation(string hexColor) + { + HexColor = hexColor; + } + + public string HexColor { get; set; } + + public override string Key => string.Format("ColorFillTransformation,hexColor={0}", HexColor); + + public static ColorHolder BlendColor(ColorHolder color, ColorHolder backColor) + { + float amount = (float)color.A / 255; + + byte r = (byte)((color.R * amount) + backColor.R * (1 - amount)); + byte g = (byte)((color.G * amount) + backColor.G * (1 - amount)); + byte b = (byte)((color.B * amount) + backColor.B * (1 - amount)); + + return new ColorHolder(r, g, b); + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, ImageSource source, bool isPlaceholder, string key) + { + var len = bitmapSource.PixelCount; + var backColor = HexColor.ToColorFromHex(); + + for (var i = 0; i < len; i++) + { + var color = bitmapSource.GetPixel(i); + bitmapSource.SetPixel(i, BlendColor(color, backColor)); + } + + return bitmapSource; + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/ColorSpaceTransformation.cs b/source/FFImageLoading.Transformations.Wpf/ColorSpaceTransformation.cs new file mode 100644 index 000000000..772dd8c23 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/ColorSpaceTransformation.cs @@ -0,0 +1,103 @@ +using FFImageLoading.Work; +using System; +using System.Linq; + +namespace FFImageLoading.Transformations +{ + public class ColorSpaceTransformation : TransformationBase + { + float[][] _rgbawMatrix; + + public ColorSpaceTransformation() : this(FFColorMatrix.InvertColorMatrix) + { + } + + public ColorSpaceTransformation(float[][] rgbawMatrix) + { + if (rgbawMatrix.Length != 5 || rgbawMatrix.Any(v => v.Length != 5)) + throw new ArgumentException("Wrong size of RGBAW color matrix"); + + RGBAWMatrix = rgbawMatrix; + } + + public float[][] RGBAWMatrix + { + get + { + return _rgbawMatrix; + } + + set + { + if (value.Length != 5 || value.Any(v => v.Length != 5)) + throw new ArgumentException("Wrong size of RGBAW color matrix"); + + _rgbawMatrix = value; + } + } + + public override string Key + { + get + { + return string.Format("ColorSpaceTransformation,rgbawMatrix={0}", + string.Join(",", _rgbawMatrix.Select(x => string.Join(",", x)).ToArray())); + } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + ToColorSpace(bitmapSource, _rgbawMatrix); + + return bitmapSource; + } + + public static void ToColorSpace(BitmapHolder bmp, float[][] rgbawMatrix) + { + var r0 = rgbawMatrix[0][0]; + var r1 = rgbawMatrix[0][1]; + var r2 = rgbawMatrix[0][2]; + var r3 = rgbawMatrix[0][3]; + + var g0 = rgbawMatrix[1][0]; + var g1 = rgbawMatrix[1][1]; + var g2 = rgbawMatrix[1][2]; + var g3 = rgbawMatrix[1][3]; + + var b0 = rgbawMatrix[2][0]; + var b1 = rgbawMatrix[2][1]; + var b2 = rgbawMatrix[2][2]; + var b3 = rgbawMatrix[2][3]; + + var a0 = rgbawMatrix[3][0]; + var a1 = rgbawMatrix[3][1]; + var a2 = rgbawMatrix[3][2]; + var a3 = rgbawMatrix[3][3]; + + var rOffset = rgbawMatrix[4][0]; + var gOffset = rgbawMatrix[4][1]; + var bOffset = rgbawMatrix[4][2]; + var aOffset = rgbawMatrix[4][3]; + + var nWidth = bmp.Width; + var nHeight = bmp.Height; + var len = bmp.PixelCount; + + for (var i = 0; i < len; i++) + { + var color = bmp.GetPixel(i); + var a = color.A; + var r = color.R; + var g = color.G; + var b = color.B; + + var rNew = (int)(r * r0 + g * g0 + b * b0 + a * a0 + rOffset); + var gNew = (int)(r * r1 + g * g1 + b * b1 + a * a1 + gOffset); + var bNew = (int)(r * r2 + g * g2 + b * b2 + a * a2 + bOffset); + var aNew = (int)(r * r3 + g * g3 + b * b3 + a * a3 + aOffset); + + bmp.SetPixel(i, new ColorHolder(aNew, rNew, gNew, bNew)); + } + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/CornerTransformType.cs b/source/FFImageLoading.Transformations.Wpf/CornerTransformType.cs new file mode 100644 index 000000000..8abfcdaa4 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/CornerTransformType.cs @@ -0,0 +1,31 @@ +using System; + +namespace FFImageLoading.Transformations +{ + [Flags] + public enum CornerTransformType + { + TopLeftCut = 0x1, + TopRightCut = 0x2, + BottomLeftCut = 0x4, + BottomRightCut = 0x8, + + TopLeftRounded = 0x10, + TopRightRounded = 0x20, + BottomLeftRounded = 0x40, + BottomRightRounded = 0x80, + + AllCut = TopLeftCut | TopRightCut | BottomLeftCut | BottomRightCut, + LeftCut = TopLeftCut | BottomLeftCut, + RightCut = TopRightCut | BottomRightCut, + TopCut = TopLeftCut | TopRightCut, + BottomCut = BottomLeftCut | BottomRightCut, + + AllRounded = TopLeftRounded | TopRightRounded | BottomLeftRounded | BottomRightRounded, + LeftRounded = TopLeftRounded | BottomLeftRounded, + RightRounded = TopRightRounded | BottomRightRounded, + TopRounded = TopLeftRounded | TopRightRounded, + BottomRounded = BottomLeftRounded | BottomRightRounded, + } +} + diff --git a/source/FFImageLoading.Transformations.Wpf/CornersTransformation.cs b/source/FFImageLoading.Transformations.Wpf/CornersTransformation.cs new file mode 100644 index 000000000..21adcb2f3 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/CornersTransformation.cs @@ -0,0 +1,251 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class CornersTransformation : TransformationBase + { + public CornersTransformation() : this(20d, CornerTransformType.TopRightRounded) + { + } + + public CornersTransformation(double cornersSize, CornerTransformType cornersTransformType) + : this(cornersSize, cornersSize, cornersSize, cornersSize, cornersTransformType, 1d, 1d) + { + } + + public CornersTransformation(double topLeftCornerSize, double topRightCornerSize, double bottomLeftCornerSize, double bottomRightCornerSize, + CornerTransformType cornersTransformType) + : this(topLeftCornerSize, topRightCornerSize, bottomLeftCornerSize, bottomRightCornerSize, cornersTransformType, 1d, 1d) + { + } + + public CornersTransformation(double cornersSize, CornerTransformType cornersTransformType, double cropWidthRatio, double cropHeightRatio) + : this(cornersSize, cornersSize, cornersSize, cornersSize, cornersTransformType, cropWidthRatio, cropHeightRatio) + { + } + + public CornersTransformation(double topLeftCornerSize, double topRightCornerSize, double bottomLeftCornerSize, double bottomRightCornerSize, + CornerTransformType cornersTransformType, double cropWidthRatio, double cropHeightRatio) + { + TopLeftCornerSize = topLeftCornerSize; + TopRightCornerSize = topRightCornerSize; + BottomLeftCornerSize = bottomLeftCornerSize; + BottomRightCornerSize = bottomRightCornerSize; + CornersTransformType = cornersTransformType; + CropWidthRatio = cropWidthRatio; + CropHeightRatio = cropHeightRatio; + } + + public double TopLeftCornerSize { get; set; } + public double TopRightCornerSize { get; set; } + public double BottomLeftCornerSize { get; set; } + public double BottomRightCornerSize { get; set; } + public double CropWidthRatio { get; set; } + public double CropHeightRatio { get; set; } + public CornerTransformType CornersTransformType { get; set; } + + public override string Key + { + get + { + return string.Format("CornersTransformation,cornersSizes={0},{1},{2},{3},cornersTransformType={4},cropWidthRatio={5},cropHeightRatio={6},", + TopLeftCornerSize, TopRightCornerSize, BottomRightCornerSize, BottomLeftCornerSize, CornersTransformType, CropWidthRatio, CropHeightRatio); + } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return ToTransformedCorners(bitmapSource, TopLeftCornerSize, TopRightCornerSize, BottomLeftCornerSize, BottomRightCornerSize, + CornersTransformType, CropWidthRatio, CropHeightRatio); + } + + public static BitmapHolder ToTransformedCorners(BitmapHolder source, double topLeftCornerSize, double topRightCornerSize, double bottomLeftCornerSize, double bottomRightCornerSize, + CornerTransformType cornersTransformType, double cropWidthRatio, double cropHeightRatio) + { + double sourceWidth = source.Width; + double sourceHeight = source.Height; + + double desiredWidth = sourceWidth; + double desiredHeight = sourceHeight; + + double desiredRatio = cropWidthRatio / cropHeightRatio; + double currentRatio = sourceWidth / sourceHeight; + + if (currentRatio > desiredRatio) + desiredWidth = (cropWidthRatio * sourceHeight / cropHeightRatio); + else if (currentRatio < desiredRatio) + desiredHeight = (cropHeightRatio * sourceWidth / cropWidthRatio); + + double cropX = ((sourceWidth - desiredWidth) / 2); + double cropY = ((sourceHeight - desiredHeight) / 2); + + BitmapHolder bitmap = null; + + if (cropX != 0 || cropY != 0) + { + bitmap = CropTransformation.ToCropped(source, (int)cropX, (int)cropY, (int)(desiredWidth), (int)(desiredHeight)); + } + else + { + bitmap = new BitmapHolder(source.PixelData, source.Width, source.Height); + } + + topLeftCornerSize = topLeftCornerSize * (desiredWidth + desiredHeight) / 2 / 100; + topRightCornerSize = topRightCornerSize * (desiredWidth + desiredHeight) / 2 / 100; + bottomLeftCornerSize = bottomLeftCornerSize * (desiredWidth + desiredHeight) / 2 / 100; + bottomRightCornerSize = bottomRightCornerSize * (desiredWidth + desiredHeight) / 2 / 100; + + int topLeftSize = (int)topLeftCornerSize; + int topRightSize = (int)topRightCornerSize; + int bottomLeftSize = (int)bottomLeftCornerSize; + int bottomRightSize = (int)bottomRightCornerSize; + + int w = bitmap.Width; + int h = bitmap.Height; + + var transparentColor = ColorHolder.Transparent; + + for (int y = 0; y < h; y++) + { + for (int x = 0; x < w; x++) + { + if (x <= topLeftSize && y <= topLeftSize) + { //top left corner + if (!CheckCorner(topLeftSize, topLeftSize, topLeftSize, cornersTransformType, Corner.TopLeftCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x >= w - topRightSize && y <= topRightSize && topRightSize > 0) + { // top right corner + if (!CheckCorner(w - topRightSize, topRightSize, topRightSize, cornersTransformType, Corner.TopRightCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x >= w - bottomRightSize && y >= h - bottomRightSize && bottomRightSize > 0) + { // bottom right corner + if (!CheckCorner(w - bottomRightSize, h - bottomRightSize, bottomRightSize, cornersTransformType, Corner.BottomRightCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x <= bottomLeftSize && y >= h - bottomLeftSize && bottomLeftSize > 0) + { // bottom left corner + if (!CheckCorner(bottomLeftSize, h - bottomLeftSize, bottomLeftSize, cornersTransformType, Corner.BottomLeftCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + } + } + + return bitmap; + } + + private enum Corner + { + TopLeftCorner, + TopRightCorner, + BottomRightCorner, + BottomLeftCorner, + } + + private static bool HasFlag(CornerTransformType flags, CornerTransformType flag) + { + return (flags & flag) != 0; + } + + private static bool CheckCorner(int w, int h, int size, CornerTransformType flags, Corner which, int xC, int yC) + { + if ((HasFlag(flags, CornerTransformType.TopLeftCut) && which == Corner.TopLeftCorner) + || (HasFlag(flags, CornerTransformType.TopRightCut) && which == Corner.TopRightCorner) + || (HasFlag(flags, CornerTransformType.BottomRightCut) && which == Corner.BottomRightCorner) + || (HasFlag(flags, CornerTransformType.BottomLeftCut) && which == Corner.BottomLeftCorner)) + return CheckCutCorner(w, h, size, which, xC, yC); + + if ((HasFlag(flags, CornerTransformType.TopLeftRounded) && which == Corner.TopLeftCorner) + || (HasFlag(flags, CornerTransformType.TopRightRounded) && which == Corner.TopRightCorner) + || (HasFlag(flags, CornerTransformType.BottomRightRounded) && which == Corner.BottomRightCorner) + || (HasFlag(flags, CornerTransformType.BottomLeftRounded) && which == Corner.BottomLeftCorner)) + return CheckRoundedCorner(w, h, size, which, xC, yC); + + return true; + } + + private static bool CheckCutCorner(int w, int h, int size, Corner which, int xC, int yC) + { + switch (which) + { + case Corner.TopLeftCorner: + { //Testing if its outside the top left corner + return Slope(size, 0, xC-1, yC) < Slope(size, 0, 0, size); + } + case Corner.TopRightCorner: + { //Testing if its outside the top right corner + return Slope(w, 0, xC, yC) > Slope(w, 0, w+size, size); + } + case Corner.BottomRightCorner: + { //Testing if its outside the bottom right corner + return Slope(h+size, h, xC, yC) > Slope(h+size, h, w, h+size); + } + case Corner.BottomLeftCorner: + { //Testing if its outside the bottom left corner + return Slope(0, h, xC, yC) < Slope(0, h, size, h+size); + } + } + + return true; + } + + private static double Slope(double x1, double y1, double x2, double y2) + { + return (y2 - y1) / (x2 - x1); + } + + private static bool CheckRoundedCorner(int h, int k, int r, Corner which, int xC, int yC) + { + int x = 0; + int y = r; + int p = (3 - (2 * r)); + + do + { + switch (which) + { + case Corner.TopLeftCorner: + { //Testing if its outside the top left corner + if (xC <= h - x && yC <= k - y) return false; + else if (xC <= h - y && yC <= k - x) return false; + break; + } + case Corner.TopRightCorner: + { //Testing if its outside the top right corner + if (xC >= h + y && yC <= k - x) return false; + else if (xC >= h + x && yC <= k - y) return false; + break; + } + case Corner.BottomRightCorner: + { //Testing if its outside the bottom right corner + if (xC >= h + x && yC >= k + y) return false; + else if (xC >= h + y && yC >= k + x) return false; + break; + } + case Corner.BottomLeftCorner: + { //Testing if its outside the bottom left corner + if (xC <= h - y && yC >= k + x) return false; + else if (xC <= h - x && yC >= k + y) return false; + break; + } + } + + x++; + + if (p < 0) + { + p += ((4 * x) + 6); + } + else + { + y--; + p += ((4 * (x - y)) + 10); + } + } while (x <= y); + + return true; + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/CropTransformation.cs b/source/FFImageLoading.Transformations.Wpf/CropTransformation.cs new file mode 100644 index 000000000..8d6a7af5d --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/CropTransformation.cs @@ -0,0 +1,125 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class CropTransformation : TransformationBase + { + public CropTransformation() : this(1d, 0d, 0d) + { + } + + public CropTransformation(double zoomFactor, double xOffset, double yOffset) : this(zoomFactor, xOffset, yOffset, 1f, 1f) + { + } + + public CropTransformation(double zoomFactor, double xOffset, double yOffset, double cropWidthRatio, double cropHeightRatio) + { + ZoomFactor = zoomFactor; + XOffset = xOffset; + YOffset = yOffset; + CropWidthRatio = cropWidthRatio; + CropHeightRatio = cropHeightRatio; + + if (ZoomFactor < 1f) + ZoomFactor = 1f; + } + + public double ZoomFactor { get; set; } + public double XOffset { get; set; } + public double YOffset { get; set; } + public double CropWidthRatio { get; set; } + public double CropHeightRatio { get; set; } + + public override string Key + { + get + { + return string.Format("CropTransformation,zoomFactor={0},xOffset={1},yOffset={2},cropWidthRatio={3},cropHeightRatio={4}", + ZoomFactor, XOffset, YOffset, CropWidthRatio, CropHeightRatio); + } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return ToCropped(bitmapSource, ZoomFactor, XOffset, YOffset, CropWidthRatio, CropHeightRatio); + } + + public static BitmapHolder ToCropped(BitmapHolder source, double zoomFactor, double xOffset, double yOffset, double cropWidthRatio, double cropHeightRatio) + { + double sourceWidth = source.Width; + double sourceHeight = source.Height; + + double desiredWidth = sourceWidth; + double desiredHeight = sourceHeight; + + double desiredRatio = cropWidthRatio / cropHeightRatio; + double currentRatio = sourceWidth / sourceHeight; + + if (currentRatio > desiredRatio) + desiredWidth = (cropWidthRatio * sourceHeight / cropHeightRatio); + else if (currentRatio < desiredRatio) + desiredHeight = (cropHeightRatio * sourceWidth / cropWidthRatio); + + xOffset = xOffset * desiredWidth; + yOffset = yOffset * desiredHeight; + + desiredWidth = desiredWidth / zoomFactor; + desiredHeight = desiredHeight / zoomFactor; + + float cropX = (float)(((sourceWidth - desiredWidth) / 2) + xOffset); + float cropY = (float)(((sourceHeight - desiredHeight) / 2) + yOffset); + + if (cropX < 0) + cropX = 0; + + if (cropY < 0) + cropY = 0; + + if (cropX + desiredWidth > sourceWidth) + cropX = (float)(sourceWidth - desiredWidth); + + if (cropY + desiredHeight > sourceHeight) + cropY = (float)(sourceHeight - desiredHeight); + + int width = (int)desiredWidth; + int height = (int)desiredHeight; + + // Copy the pixels line by line using fast BlockCopy + var result = new byte[width * height * 4]; + + for (var line = 0; line < height; line++) + { + var srcOff = (((int)cropY + line) * source.Width + (int)cropX) * ColorExtensions.SizeOfArgb; + var dstOff = line * width * ColorExtensions.SizeOfArgb; + Helpers.BlockCopy(source.PixelData, srcOff, result, dstOff, width * ColorExtensions.SizeOfArgb); + } + + return new BitmapHolder(result, width, height); + } + + public static BitmapHolder ToCropped(BitmapHolder source, int x, int y, int width, int height) + { + var srcWidth = source.Width; + var srcHeight = source.Height; + + // Clamp to boundaries + if (x < 0) x = 0; + if (x + width > srcWidth) width = srcWidth - x; + if (y < 0) y = 0; + if (y + height > srcHeight) height = srcHeight - y; + + // Copy the pixels line by line using fast BlockCopy + var result = new byte[width * height * 4]; + + for (var line = 0; line < height; line++) + { + var srcOff = ((y + line) * srcWidth + x) * ColorExtensions.SizeOfArgb; + var dstOff = line * width * ColorExtensions.SizeOfArgb; + Helpers.BlockCopy(source.PixelData, srcOff, result, dstOff, width * ColorExtensions.SizeOfArgb); + } + + return new BitmapHolder(result, width, height); + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/FFImageLoading.Transformations.Wpf.csproj b/source/FFImageLoading.Transformations.Wpf/FFImageLoading.Transformations.Wpf.csproj new file mode 100644 index 000000000..9a28e9b20 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/FFImageLoading.Transformations.Wpf.csproj @@ -0,0 +1,72 @@ + + + + + Debug + AnyCPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04} + Library + Properties + FFImageLoading.Transformations + FFImageLoading.Transformations + v4.7.1 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {0ad3a755-399a-4527-a001-6192724c67bb} + FFImageLoading + + + {dc06c582-6c7e-4018-a752-feb528c65f7e} + FFImageLoading.Wpf + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Transformations.Wpf/FlipTransformation.cs b/source/FFImageLoading.Transformations.Wpf/FlipTransformation.cs new file mode 100644 index 000000000..dfb1bfa63 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/FlipTransformation.cs @@ -0,0 +1,66 @@ +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class FlipTransformation : TransformationBase + { + public FlipTransformation() : this(FlipType.Horizontal) + { + } + + public FlipTransformation(FlipType flipType) + { + FlipType = flipType; + } + + public override string Key + { + get { return string.Format("FlipTransformation,Type={0}", FlipType); } + } + + public FlipType FlipType { get; set; } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return ToFlipped(bitmapSource, FlipType); + } + + public static BitmapHolder ToFlipped(BitmapHolder bmp, FlipType flipMode) + { + // Use refs for faster access (really important!) speeds up a lot! + var w = bmp.Width; + var h = bmp.Height; + var i = 0; + BitmapHolder result = new BitmapHolder(new byte[bmp.PixelData.Length], w, h); + + if (flipMode == FlipType.Vertical) + { + var rp = result.PixelData; + for (var y = h - 1; y >= 0; y--) + { + for (var x = 0; x < w; x++) + { + var srcInd = y * w + x; + result.SetPixel(i, bmp.GetPixel(srcInd)); + i++; + } + } + } + else + { + var rp = result.PixelData; + for (var y = 0; y < h; y++) + { + for (var x = w - 1; x >= 0; x--) + { + var srcInd = y * w + x; + result.SetPixel(i, bmp.GetPixel(srcInd)); + i++; + } + } + } + + return result; + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/FlipType.cs b/source/FFImageLoading.Transformations.Wpf/FlipType.cs new file mode 100644 index 000000000..755541ae5 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/FlipType.cs @@ -0,0 +1,11 @@ +using System; + +namespace FFImageLoading.Transformations +{ + public enum FlipType + { + Horizontal, + Vertical + } +} + diff --git a/source/FFImageLoading.Transformations.Wpf/GrayscaleTransformation.cs b/source/FFImageLoading.Transformations.Wpf/GrayscaleTransformation.cs new file mode 100644 index 000000000..9210a253c --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/GrayscaleTransformation.cs @@ -0,0 +1,46 @@ +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class GrayscaleTransformation : TransformationBase + { + public GrayscaleTransformation() + { + } + + public override string Key + { + get { return "GrayscaleTransformation"; } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + ToGrayscale(bitmapSource); + + return bitmapSource; + } + + public static void ToGrayscale(BitmapHolder bmp) + { + var nWidth = bmp.Width; + var nHeight = bmp.Height; + + var len = bmp.PixelCount; + + for (var i = 0; i < len; i++) + { + var color = bmp.GetPixel(i); + int a = color.A; + int r = color.R; + int g = color.G; + int b = color.B; + + // Convert to gray with constant factors 0.2126, 0.7152, 0.0722 + var gray = (r * 6966 + g * 23436 + b * 2366) >> 15; + r = g = b = gray; + + bmp.SetPixel(i, new ColorHolder(a, r, g, b)); + } + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/Helpers/Helpers.cs b/source/FFImageLoading.Transformations.Wpf/Helpers/Helpers.cs new file mode 100644 index 000000000..195a69193 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/Helpers/Helpers.cs @@ -0,0 +1,12 @@ +using System; + +namespace FFImageLoading.Transformations +{ + public static class Helpers + { + public static void BlockCopy(Array src, int srcOffset, Array dest, int destOffset, int count) + { + Buffer.BlockCopy(src, srcOffset, dest, destOffset, count); + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/Properties/AssemblyInfo.cs b/source/FFImageLoading.Transformations.Wpf/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..57fd649e1 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FFImageLoading.Wpf")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FFImageLoading.Wpf")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a63b1175-5fb5-4a9c-bcc5-8ac091876d04")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/FFImageLoading.Transformations.Wpf/RotateTransformation.cs b/source/FFImageLoading.Transformations.Wpf/RotateTransformation.cs new file mode 100644 index 000000000..84a8d4867 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/RotateTransformation.cs @@ -0,0 +1,193 @@ +using System; +using FFImageLoading.Work; +using FFImageLoading.Helpers; + +namespace FFImageLoading.Transformations +{ + public class RotateTransformation : TransformationBase + { + public RotateTransformation() : this(30d) + { + } + + public RotateTransformation(double degrees) : this(degrees, false, false) + { + } + + public RotateTransformation(double degrees, bool ccw) : this(degrees, ccw, false) + { + } + + public RotateTransformation(double degrees, bool ccw, bool resize) + { + Degrees = degrees; + CCW = ccw; + Resize = resize; + } + + public double Degrees { get; set; } + public bool CCW { get; set; } + public bool Resize { get; set; } + + public override string Key + { + get { return string.Format("RotateTransformation,degrees={0},ccw={1},resize={2}", Degrees, CCW, Resize); } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return ToRotated(bitmapSource, Degrees, CCW, Resize); + } + + public static BitmapHolder ToRotated(BitmapHolder source, double degrees, bool ccw, bool resize) + { + if (degrees == 0 || degrees % 360 == 0) + return source; + + if (ccw) + degrees = 360d - degrees; + + // rotating clockwise, so it's negative relative to Cartesian quadrants + double cnAngle = -1.0 * (Math.PI / 180) * degrees; + + // general iterators + int i, j; + // calculated indices in Cartesian coordinates + int x, y; + double fDistance, fPolarAngle; + // for use in neighboring indices in Cartesian coordinates + int iFloorX, iCeilingX, iFloorY, iCeilingY; + // calculated indices in Cartesian coordinates with trailing decimals + double fTrueX, fTrueY; + // for interpolation + double fDeltaX, fDeltaY; + + // interpolated "top" pixels + double fTopRed, fTopGreen, fTopBlue, fTopAlpha; + + // interpolated "bottom" pixels + double fBottomRed, fBottomGreen, fBottomBlue, fBottomAlpha; + + // final interpolated color components + int iRed, iGreen, iBlue, iAlpha; + + int iCentreX, iCentreY; + int iDestCentreX, iDestCentreY; + int iWidth, iHeight, newWidth, newHeight; + + iWidth = source.Width; + iHeight = source.Height; + + if (!resize || (degrees % 180 == 0)) + { + newWidth = iWidth; + newHeight = iHeight; + } + else + { + var rad = degrees / (180 / Math.PI); + newWidth = (int)Math.Ceiling(Math.Abs(Math.Sin(rad) * iHeight) + Math.Abs(Math.Cos(rad) * iWidth)); + newHeight = (int)Math.Ceiling(Math.Abs(Math.Sin(rad) * iWidth) + Math.Abs(Math.Cos(rad) * iHeight)); + } + + + iCentreX = iWidth / 2; + iCentreY = iHeight / 2; + + iDestCentreX = newWidth / 2; + iDestCentreY = newHeight / 2; + + var newSource = new BitmapHolder(new byte[newWidth * newHeight * 4], newWidth, newHeight); + var oldw = source.Width; + + // assigning pixels of destination image from source image + // with bilinear interpolation + for (i = 0; i < newHeight; ++i) + { + for (j = 0; j < newWidth; ++j) + { + // convert raster to Cartesian + x = j - iDestCentreX; + y = iDestCentreY - i; + + // convert Cartesian to polar + fDistance = Math.Sqrt(x * x + y * y); + if (x == 0) + { + if (y == 0) + { + // center of image, no rotation needed + newSource.SetPixel(i * newWidth + j, source.GetPixel(iCentreY * oldw + iCentreX)); + continue; + } + if (y < 0) + { + fPolarAngle = 1.5 * Math.PI; + } + else + { + fPolarAngle = 0.5 * Math.PI; + } + } + else + { + fPolarAngle = Math.Atan2(y, x); + } + + // the crucial rotation part + // "reverse" rotate, so minus instead of plus + fPolarAngle -= cnAngle; + + // convert polar to Cartesian + fTrueX = fDistance * Math.Cos(fPolarAngle); + fTrueY = fDistance * Math.Sin(fPolarAngle); + + // convert Cartesian to raster + fTrueX = fTrueX + iCentreX; + fTrueY = iCentreY - fTrueY; + + iFloorX = (int)(Math.Floor(fTrueX)); + iFloorY = (int)(Math.Floor(fTrueY)); + iCeilingX = (int)(Math.Ceiling(fTrueX)); + iCeilingY = (int)(Math.Ceiling(fTrueY)); + + // check bounds + if (iFloorX < 0 || iCeilingX < 0 || iFloorX >= iWidth || iCeilingX >= iWidth || iFloorY < 0 || + iCeilingY < 0 || iFloorY >= iHeight || iCeilingY >= iHeight) + continue; + + fDeltaX = fTrueX - iFloorX; + fDeltaY = fTrueY - iFloorY; + + var clrTopLeft = source.GetPixel(iFloorY * oldw + iFloorX); + var clrTopRight = source.GetPixel(iFloorY * oldw + iCeilingX); + var clrBottomLeft = source.GetPixel(iCeilingY * oldw + iFloorX); + var clrBottomRight = source.GetPixel(iCeilingY * oldw + iCeilingX); + + fTopAlpha = (1 - fDeltaX) * (clrTopLeft.A) + fDeltaX * (clrTopRight.A); + fTopRed = (1 - fDeltaX) * (clrTopLeft.R) + fDeltaX * (clrTopRight.R); + fTopGreen = (1 - fDeltaX) * (clrTopLeft.G) + fDeltaX * (clrTopRight.G); + fTopBlue = (1 - fDeltaX) * (clrTopLeft.B) + fDeltaX * (clrTopRight.B); + + // linearly interpolate horizontally between bottom neighbors + fBottomAlpha = (1 - fDeltaX) * (clrBottomLeft.A) + fDeltaX * (clrBottomRight.A); + fBottomRed = (1 - fDeltaX) * (clrBottomLeft.R) + fDeltaX * (clrBottomRight.R); + fBottomGreen = (1 - fDeltaX) * (clrBottomLeft.G) + fDeltaX * (clrBottomRight.G); + fBottomBlue = (1 - fDeltaX) * (clrBottomLeft.B) + fDeltaX * (clrBottomRight.B); + + // linearly interpolate vertically between top and bottom interpolated results + iRed = (int)(Math.Round((1 - fDeltaY) * fTopRed + fDeltaY * fBottomRed)); + iGreen = (int)(Math.Round((1 - fDeltaY) * fTopGreen + fDeltaY * fBottomGreen)); + iBlue = (int)(Math.Round((1 - fDeltaY) * fTopBlue + fDeltaY * fBottomBlue)); + iAlpha = (int)(Math.Round((1 - fDeltaY) * fTopAlpha + fDeltaY * fBottomAlpha)); + + var a = iAlpha + 1; + + newSource.SetPixel(i * newWidth + j, new ColorHolder(iAlpha, iRed, iGreen, iBlue)); + } + } + + return newSource; + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/RoundedTransformation.cs b/source/FFImageLoading.Transformations.Wpf/RoundedTransformation.cs new file mode 100644 index 000000000..1e688a01f --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/RoundedTransformation.cs @@ -0,0 +1,259 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Helpers; +using FFImageLoading.Work; +using System; + +namespace FFImageLoading.Transformations +{ + public class RoundedTransformation : TransformationBase + { + public RoundedTransformation() : this(30d) + { + } + + public RoundedTransformation(double radius) : this(radius, 1d, 1d) + { + } + + public RoundedTransformation(double radius, double cropWidthRatio, double cropHeightRatio) : this(radius, cropWidthRatio, cropHeightRatio, 0d, null) + { + } + + public RoundedTransformation(double radius, double cropWidthRatio, double cropHeightRatio, double borderSize, string borderHexColor) + { + Radius = radius; + CropWidthRatio = cropWidthRatio; + CropHeightRatio = cropHeightRatio; + BorderSize = borderSize; + BorderHexColor = borderHexColor; + } + + public double Radius { get; set; } + public double CropWidthRatio { get; set; } + public double CropHeightRatio { get; set; } + public double BorderSize { get; set; } + public string BorderHexColor { get; set; } + + public override string Key + { + get + { + return string.Format("RoundedTransformation,radius={0},cropWidthRatio={1},cropHeightRatio={2},borderSize={3},borderHexColor={4}", + Radius, CropWidthRatio, CropHeightRatio, BorderSize, BorderHexColor); + } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return ToRounded(bitmapSource, (int)Radius, CropWidthRatio, CropHeightRatio, BorderSize, BorderHexColor); + } + + public static BitmapHolder ToRounded(BitmapHolder source, int rad, double cropWidthRatio, double cropHeightRatio, double borderSize, string borderHexColor) + { + double sourceWidth = source.Width; + double sourceHeight = source.Height; + + double desiredWidth = sourceWidth; + double desiredHeight = sourceHeight; + + double desiredRatio = cropWidthRatio / cropHeightRatio; + double currentRatio = sourceWidth / sourceHeight; + + if (currentRatio > desiredRatio) + desiredWidth = (cropWidthRatio * sourceHeight / cropHeightRatio); + else if (currentRatio < desiredRatio) + desiredHeight = (cropHeightRatio * sourceWidth / cropWidthRatio); + + double cropX = ((sourceWidth - desiredWidth) / 2); + double cropY = ((sourceHeight - desiredHeight) / 2); + + BitmapHolder bitmap = null; + + if (cropX != 0 || cropY != 0) + { + bitmap = CropTransformation.ToCropped(source, (int)cropX, (int)cropY, (int)(desiredWidth), (int)(desiredHeight)); + } + else + { + bitmap = new BitmapHolder(source.PixelData, source.Width, source.Height); + } + + if (rad == 0) + rad = (int)(Math.Min(desiredWidth, desiredHeight) / 2); + else rad = (int)(rad * (desiredWidth + desiredHeight) / 2 / 500); + + int w = (int)desiredWidth; + int h = (int)desiredHeight; + + var transparentColor = ColorHolder.Transparent; + + for (int y = 0; y < h; y++) + { + for (int x = 0; x < w; x++) + { + if (x <= rad && y <= rad) + { //top left corner + if (!CheckRoundedCorner(rad, rad, rad, Corner.TopLeftCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x >= w - rad && y <= rad) + { // top right corner + if (!CheckRoundedCorner(w - rad, rad, rad, Corner.TopRightCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x >= w - rad && y >= h - rad) + { // bottom right corner + if (!CheckRoundedCorner(w - rad, h - rad, rad, Corner.BottomRightCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x <= rad && y >= h - rad) + { // bottom left corner + if (!CheckRoundedCorner(rad, h - rad, rad, Corner.BottomLeftCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + } + } + + //TODO draws a border - we should optimize that and add some anti-aliasing + //if (borderSize > 0d) + //{ + // borderSize = (borderSize * (desiredWidth + desiredHeight) / 2d / 500d); + // var borderColor = ColorHolder.Transparent; + + // try + // { + // borderColor = borderHexColor.ToColorFromHex(); + // } + // catch (Exception) + // { + // } + + // int intBorderSize = (int)Math.Ceiling(borderSize); + + // for (int i = 0; i < intBorderSize; i++) + // { + // CircleAA(bitmap, i, borderColor); + // } + //} + + return bitmap; + } + + private enum Corner + { + TopLeftCorner, + TopRightCorner, + BottomRightCorner, + BottomLeftCorner, + } + + private static bool CheckRoundedCorner(int h, int k, int r, Corner which, int xC, int yC) + { + int x = 0; + int y = r; + int p = (3 - (2 * r)); + + do + { + switch (which) + { + case Corner.TopLeftCorner: + { //Testing if its outside the top left corner + if (xC <= h - x && yC <= k - y) return false; + else if (xC <= h - y && yC <= k - x) return false; + break; + } + case Corner.TopRightCorner: + { //Testing if its outside the top right corner + if (xC >= h + y && yC <= k - x) return false; + else if (xC >= h + x && yC <= k - y) return false; + break; + } + case Corner.BottomRightCorner: + { //Testing if its outside the bottom right corner + if (xC >= h + x && yC >= k + y) return false; + else if (xC >= h + y && yC >= k + x) return false; + break; + } + case Corner.BottomLeftCorner: + { //Testing if its outside the bottom left corner + if (xC <= h - y && yC >= k + x) return false; + else if (xC <= h - x && yC >= k + y) return false; + break; + } + } + + x++; + + if (p < 0) + { + p += ((4 * x) + 6); + } + else + { + y--; + p += ((4 * (x - y)) + 10); + } + } while (x <= y); + + return true; + } + + // helper function, draws pixel and mirrors it + static void SetPixel4(BitmapHolder bitmap, int centerX, int centerY, int deltaX, int deltaY, ColorHolder color) + { + if (centerX + deltaX < bitmap.Width && centerY + deltaY < bitmap.Height) + bitmap.SetPixel(centerX + deltaX, centerY + deltaY, color); + + if (centerX - deltaX >= 0 && centerY + deltaY < bitmap.Height) + bitmap.SetPixel(centerX - deltaX, centerY + deltaY, color); + + if (centerX + deltaX < bitmap.Width && centerY - deltaY >= 0) + bitmap.SetPixel(centerX + deltaX, centerY - deltaY, color); + + if (centerX - deltaX >= 0 && centerY - deltaY >= 0) + bitmap.SetPixel(centerX - deltaX, centerY - deltaY, color); + } + + static void CircleAA(BitmapHolder bitmap, int size, ColorHolder color) + { + //if (size % 2 != 0) + // size++; + + int centerX = bitmap.Width / 2; + double radiusX = (bitmap.Width - size) / 2; + int centerY = bitmap.Height / 2; + double radiusY = (bitmap.Height - size) / 2; + + const int maxTransparency = 255; // default: 127 + double radiusX2 = radiusX * radiusX; + double radiusY2 = radiusY * radiusY; + + // upper and lower halves + int quarter = (int)Math.Round(radiusX2 / Math.Sqrt(radiusX2 + radiusY2)); + + for (int x = 0; x <= quarter; x++) + { + double y = Math.Floor(radiusY * Math.Sqrt(1 - x * x / radiusX2)); + double error = y - Math.Floor(y); + int transparency = (int)Math.Round(error * maxTransparency); + + //SetPixel4(bitmap, centerX, centerY, x, (int)Math.Floor(y), color); + SetPixel4(bitmap, centerX, centerY, x, (int)Math.Floor(y), new ColorHolder(transparency, color.R, color.G, color.B)); + SetPixel4(bitmap, centerX, centerY, x, (int)Math.Floor(y) + 1, new ColorHolder(maxTransparency - transparency, color.R, color.G, color.B)); + } + + // right and left halves + quarter = (int)Math.Round(radiusY2 / Math.Sqrt(radiusX2 + radiusY2)); + + for (int y = 0; y <= quarter; y++) + { + double x = Math.Floor(radiusX * Math.Sqrt(1 - y * y / radiusY2)); + double error = x - Math.Floor(x); + int transparency = (int)Math.Round(error * maxTransparency); + SetPixel4(bitmap, centerX, centerY, (int)Math.Floor(x), y, new ColorHolder(transparency, color.R, color.G, color.B)); + SetPixel4(bitmap, centerX, centerY, (int)Math.Floor(x) + 1, y, new ColorHolder(maxTransparency - transparency, color.R, color.G, color.B)); + } + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/SepiaTransformation.cs b/source/FFImageLoading.Transformations.Wpf/SepiaTransformation.cs new file mode 100644 index 000000000..844bef4a2 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/SepiaTransformation.cs @@ -0,0 +1,55 @@ +using System; +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class SepiaTransformation : TransformationBase + { + public SepiaTransformation() + { + } + + public override string Key + { + get { return "SepiaTransformation"; } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + ToSepia(bitmapSource); + + return bitmapSource; + } + + public static void ToSepia(BitmapHolder bmp) + { + var nWidth = bmp.Width; + var nHeight = bmp.Height; + var len = bmp.PixelCount; + + for (var i = 0; i < len; i++) + { + var color = bmp.GetPixel(i); + int a = color.A; + int r = color.R; + int g = color.G; + int b = color.B; + + var rNew = (int)Math.Min((.393 * r) + (.769 * g) + (.189 * (b)), 255.0); + var gNew = (int)Math.Min((.349 * r) + (.686 * g) + (.168 * (b)), 255.0); + var bNew = (int)Math.Min((.272 * r) + (.534 * g) + (.131 * (b)), 255.0); + + if (rNew > 255) + rNew = 255; + + if (gNew > 255) + gNew = 255; + + if (bNew > 255) + bNew = 255; + + bmp.SetPixel(i, new ColorHolder(a, rNew, gNew, bNew)); + } + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/TintTransformation.cs b/source/FFImageLoading.Transformations.Wpf/TintTransformation.cs new file mode 100644 index 000000000..eea8c8ff5 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/TintTransformation.cs @@ -0,0 +1,109 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Work; +using System; + +namespace FFImageLoading.Transformations +{ + public class TintTransformation : ColorSpaceTransformation + { + public TintTransformation() : this(0, 165, 0, 128) + { + } + + public TintTransformation(int r, int g, int b, int a) + { + R = r; + G = g; + B = b; + A = a; + } + + public TintTransformation(string hexColor) + { + HexColor = hexColor; + } + + string _hexColor; + public string HexColor + { + get + { + return _hexColor; + } + + set + { + _hexColor = value; + var color = value.ToColorFromHex(); + A = color.A; + R = color.R; + G = color.G; + B = color.B; + } + } + + public bool EnableSolidColor { get; set; } + + public int R { get; set; } + + public int G { get; set; } + + public int B { get; set; } + + public int A { get; set; } + + public override string Key + { + get + { + return string.Format("TintTransformation,R={0},G={1},B={2},A={3},HexColor={4},EnableSolidColor={5}", + R, G, B, A, HexColor, EnableSolidColor); + } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + if (EnableSolidColor) + { + ToReplacedColor(bitmapSource, R, G, B, A); + return bitmapSource; + } + + RGBAWMatrix = FFColorMatrix.ColorToTintMatrix(R, G, B, A); + + return base.Transform(bitmapSource, path, source, isPlaceholder, key); + } + + public static void ToReplacedColor(BitmapHolder bmp, int r, int g, int b, int a) + { + var nWidth = bmp.Width; + var nHeight = bmp.Height; + var len = bmp.PixelCount; + float percentage = (float)a / 255; + float left = 1 - percentage; + int rMin = (int)(r - (r * left)); + int gMin = (int)(g - (g * left)); + int bMin = (int)(b - (b * left)); + int rMax = (int)(r + (r * left)); + int gMax = (int)(g + (g * left)); + int bMax = (int)(b + (b * left)); + + for (var i = 0; i < len; i++) + { + var color = bmp.GetPixel(i); + int currentAlpha = color.A; + var curR = color.R; + var curG = color.G; + var curB = color.B; + int rNew = (int)(curR + (255 - curR) * (percentage * r / 255)); + int gNew = (int)(curG + (255 - curG) * (percentage * g / 255)); + int bNew = (int)(curB + (255 - curB) * (percentage * b / 255)); + rNew = Math.Min(Math.Max(rMin, rNew), rMax); + gNew = Math.Min(Math.Max(gMin, gNew), gMax); + bNew = Math.Min(Math.Max(bMin, bNew), bMax); + + bmp.SetPixel(i, new ColorHolder(color.A, rNew, gNew, bNew)); + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Cache/FFSourceBindingCache.cs b/source/FFImageLoading.Wpf/Cache/FFSourceBindingCache.cs new file mode 100644 index 000000000..c12b1f3b1 --- /dev/null +++ b/source/FFImageLoading.Wpf/Cache/FFSourceBindingCache.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace FFImageLoading.Cache +{ + /// + /// This class optimizes the call to "StorageFile.GetFileFromPathAsync" that is time consuming. + /// The source of each image is the key of the cache... once a source has been checked the first time, any other control can be skipped + /// + public static class FFSourceBindingCache + { + private static Dictionary> _cache = new Dictionary>(128); + + public static async Task IsFileAsync(string path) + { + + if (_cache.ContainsKey(path)) + { + return _cache[path].Item1; + } + else + { + if (_cache.Count >= 128) + { + _cache.Clear(); + } + + StorageFile file = await GetFileAsync(path); + _cache.Add(path, new Tuple(file != null, file)); + return file != null; + } + } + + public static async Task GetFileAsync(string path) + { + StorageFile file = null; + try + { + var filePath = System.IO.Path.GetDirectoryName(path); + if (!string.IsNullOrWhiteSpace(filePath) && !(filePath.TrimStart('\\', '/')).StartsWith("Assets")) + { + file = await StorageFile.GetFileFromPathAsync(path); + } + } + catch (Exception) + { + } + + return file; + } + } +} diff --git a/source/FFImageLoading.Wpf/Cache/IImageCache.cs b/source/FFImageLoading.Wpf/Cache/IImageCache.cs new file mode 100644 index 000000000..530aac8d9 --- /dev/null +++ b/source/FFImageLoading.Wpf/Cache/IImageCache.cs @@ -0,0 +1,8 @@ +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Cache +{ + interface IImageCache : IMemoryCache + { + } +} diff --git a/source/FFImageLoading.Wpf/Cache/ImageCache.cs b/source/FFImageLoading.Wpf/Cache/ImageCache.cs new file mode 100644 index 000000000..50d2ff9f0 --- /dev/null +++ b/source/FFImageLoading.Wpf/Cache/ImageCache.cs @@ -0,0 +1,110 @@ +using System; +using FFImageLoading.Work; +using FFImageLoading.Helpers; +using System.Linq; +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Cache +{ + class ImageCache : IImageCache + { + private static IImageCache _instance; + private readonly WriteableBitmapLRUCache _reusableBitmaps; + private readonly IMiniLogger _logger; + + private ImageCache(int maxCacheSize, IMiniLogger logger) + { + _logger = logger; + + if (maxCacheSize == 0) + { + //TODO Does anyone know how we could get available app ram from WinRT API? + //EasClientDeviceInformation deviceInfo = new EasClientDeviceInformation(); + //if (deviceInfo.OperatingSystem.ToLowerInvariant().Contains("phone")) + // maxCacheSize = 1000000 * 64; //64MB + //else + maxCacheSize = 1000000 * 256; //256MB + + _logger?.Debug($"Memory cache size: {maxCacheSize} bytes"); + } + + _reusableBitmaps = new WriteableBitmapLRUCache(maxCacheSize); + } + + public static IImageCache Instance + { + get + { + return _instance ?? (_instance = new ImageCache(ImageService.Instance.Config.MaxMemoryCacheSize, ImageService.Instance.Config.Logger)); + } + } + + public void Add(string key, ImageInformation imageInformation, BitmapSource bitmap) + { + if (string.IsNullOrWhiteSpace(key) || bitmap == null) + return; + + _reusableBitmaps.TryAdd(key, new Tuple(bitmap, imageInformation)); + } + + public ImageInformation GetInfo(string key) + { + Tuple cacheEntry; + if (_reusableBitmaps.TryGetValue (key, out cacheEntry)) + { + return cacheEntry.Item2; + } + + return null; + } + + public Tuple Get(string key) + { + if (string.IsNullOrWhiteSpace(key)) + return null; + + Tuple cacheEntry; + + if (_reusableBitmaps.TryGetValue(key, out cacheEntry) && cacheEntry.Item1 != null) + { + return new Tuple(cacheEntry.Item1, cacheEntry.Item2); + } + + return null; + } + + public void Clear() + { + _reusableBitmaps.Clear(); + + // Force immediate Garbage collection. Please note that is resource intensive. + GC.Collect(); + GC.WaitForPendingFinalizers(); + GC.WaitForPendingFinalizers(); + GC.Collect(); + } + + public void Remove(string key) + { + if (string.IsNullOrWhiteSpace(key)) + return; + + _logger.Debug (string.Format ("Called remove from memory cache for '{0}'", key)); + _reusableBitmaps.Remove(key); + } + + public void RemoveSimilar(string baseKey) + { + if (string.IsNullOrWhiteSpace(baseKey)) + return; + + var pattern = baseKey + ";"; + + var keysToRemove = _reusableBitmaps.Keys.Where(i => i.StartsWith(pattern, StringComparison.OrdinalIgnoreCase)).ToList(); + foreach (var key in keysToRemove) + { + Remove(key); + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Cache/LRUCache.cs b/source/FFImageLoading.Wpf/Cache/LRUCache.cs new file mode 100644 index 000000000..48120b75a --- /dev/null +++ b/source/FFImageLoading.Wpf/Cache/LRUCache.cs @@ -0,0 +1,182 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFImageLoading.Cache +{ + public abstract class LRUCache where TKey : class where TValue : class + { + private readonly object _lockObj = new object(); + private int _currentSize; + private Dictionary>> _cacheMap = new Dictionary>>(); + protected LinkedList> _lruList = new LinkedList>(); + + protected int _capacity; + + public LRUCache(int capacity) + { + _capacity = capacity; + } + + public abstract int GetValueSize(TValue value); + + public bool ContainsKey(TKey key) + { + TValue dummy; + return TryGetValue(key, out dummy); + } + + public TValue Get(TKey key) + { + lock (_lockObj) + { + LinkedListNode> node; + if (_cacheMap.TryGetValue(key, out node)) + { + TValue value = node.Value.Value; + _lruList.Remove(node); + _lruList.AddLast(node); + return value; + } + return default(TValue); + } + } + + public bool TryAdd(TKey key, TValue value) + { + lock (_lockObj) + { + CleanAbandonedItems(); + + if (_cacheMap.ContainsKey(key)) + { + return false; + } + this.CheckSize(key, value); + LRUCacheItem cacheItem = new LRUCacheItem(key, value); + LinkedListNode> node = + new LinkedListNode>(cacheItem); + _lruList.AddLast(node); + _cacheMap.Add(key, node); + + return true; + } + } + + public bool TryGetValue(TKey key, out TValue value) + { + lock (_lockObj) + { + LinkedListNode> node; + if (_cacheMap.TryGetValue(key, out node)) + { + value = node.Value.Value; + + if (value == null) + { + Remove(key); + return false; + } + + _lruList.Remove(node); + _lruList.AddLast(node); + return true; + } + value = default(TValue); + return false; + } + } + + public void Clear() + { + lock (_lockObj) + { + _cacheMap.Clear(); + _lruList.Clear(); + } + } + + public IList Keys + { + get + { + lock (_lockObj) + { + return _cacheMap.Keys.ToList(); + } + } + } + + public IList Values + { + get + { + lock (_lockObj) + { + return _cacheMap.Values.Select(v => v.Value.Value).ToList(); + } + } + } + + void CleanAbandonedItems() + { + //TODO? + } + + protected virtual bool CheckSize(TKey key, TValue value) + { + var size = GetValueSize(value); + _currentSize += size; + + while (_currentSize > _capacity && _lruList.Count > 0) + { + this.RemoveFirst(); + } + + return true; + } + + public void Remove(TKey key) + { + LinkedListNode> node; + if (_cacheMap.TryGetValue(key, out node)) + { + _lruList.Remove(node); + } + } + + protected virtual void RemoveNode(LinkedListNode> node) + { + _lruList.Remove(node); + _cacheMap.Remove(node.Value.Key); + _currentSize -= GetValueSize(node.Value.Value); + } + + protected void RemoveFirst() + { + LinkedListNode> node = _lruList.First; + this.RemoveNode(node); + } + + protected class LRUCacheItem + { + public LRUCacheItem(K k, V v) + { + Key = k; + Value = v; + } + public K Key + { + get; + private set; + } + public V Value + { + get; + private set; + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Cache/SimpleDiskCache.cs b/source/FFImageLoading.Wpf/Cache/SimpleDiskCache.cs new file mode 100644 index 000000000..474562d04 --- /dev/null +++ b/source/FFImageLoading.Wpf/Cache/SimpleDiskCache.cs @@ -0,0 +1,343 @@ +using System; +using System.Collections.Concurrent; +using System.Text; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using System.IO; +using System.IO.IsolatedStorage; +using FFImageLoading.Cache; +using FFImageLoading.Config; +using FFImageLoading.Helpers; + + +namespace FFImageLoading.Cache +{ + public class SimpleDiskCache : IDiskCache + { + readonly SemaphoreSlim fileWriteLock = new SemaphoreSlim(1, 1); + readonly SemaphoreSlim _currentWriteLock = new SemaphoreSlim(1, 1); + Task initTask = null; + string cacheFolderName; + IsolatedStorageFile rootFolder; + IsolatedStorageFile cacheFolder; + ConcurrentDictionary fileWritePendingTasks = new ConcurrentDictionary(); + ConcurrentDictionary entries = new ConcurrentDictionary(); + Task _currentWrite = Task.FromResult(1); + + /// + /// Initializes a new instance of the class. This constructor attempts + /// to create a folder of the given name under the . + /// + /// The name of the cache folder. + /// The configuration object. + public SimpleDiskCache(string cacheFolderName, Configuration configuration) + { + Configuration = configuration; + this.cacheFolderName = cacheFolderName; + initTask = Init(); + } + + /// + /// Initializes a new instance of the class. This constructor attempts + /// to create a folder of the given name under the given root . + /// + /// The root folder where the cache folder will be created. + /// The cache folder name. + /// The configuration object. + public SimpleDiskCache(IsolatedStorageFile rootFolder, string cacheFolderName, Configuration configuration) + { + Configuration = configuration; + this.rootFolder = rootFolder ?? IsolatedStorageFile.GetUserStoreForApplication(); + this.cacheFolderName = cacheFolderName; + initTask = Init(); + } + + protected Configuration Configuration { get; private set; } + protected IMiniLogger Logger { get { return Configuration.Logger; } } + + protected virtual async Task Init() + { + try + { + CreateCacheDirIfNotExists(); + await InitializeEntries().ConfigureAwait(false); + } + catch + { + rootFolder.DeleteDirectory(cacheFolderName); + CreateCacheDirIfNotExists(); + } + finally + { + var task = CleanCallback(); + } + } + + private void CreateCacheDirIfNotExists() + { + if (!rootFolder.DirectoryExists(cacheFolderName)) + rootFolder.CreateDirectory(cacheFolderName); + } + + protected virtual async Task InitializeEntries() + { + foreach (var file in GetAllEntries()) + { + var name = Path.GetFileName(file); + var key = Path.GetFileNameWithoutExtension(file); + var ext = Path.GetExtension(file); + var duration = GetDuration(ext); + var created = rootFolder.GetCreationTime(file); + entries.TryAdd(key, new CacheEntry(created.UtcDateTime, duration, name)); + } + } + + protected virtual TimeSpan GetDuration(string text) + { + string textToParse = text.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(); + if (string.IsNullOrWhiteSpace(textToParse)) + return Configuration.DiskCacheDuration; + + int duration; + return int.TryParse(textToParse, out duration) ? TimeSpan.FromSeconds(duration) : Configuration.DiskCacheDuration; + } + + protected virtual async Task CleanCallback() + { + var now = DateTime.UtcNow; + var kvps = entries.Where(kvp => kvp.Value.Origin + kvp.Value.TimeToLive < now).ToArray(); + + foreach (var kvp in kvps) + { + if (entries.TryRemove(kvp.Key, out var oldCacheEntry)) + { + try + { + Logger.Debug(string.Format("SimpleDiskCache: Removing expired file {0}", kvp.Key)); + rootFolder.DeleteFile(GetCacheFileName(oldCacheEntry.FileName)); + } + catch + { + } + } + } + } + + /// + /// GetFilePath + /// + /// + /// + public virtual async Task GetFilePathAsync(string key) + { + await initTask.ConfigureAwait(false); + + CacheEntry entry; + if (!entries.TryGetValue(key, out entry)) + return null; + + return Path.Combine(rootFolder.ToString(), GetCacheFileName(entry.FileName)); + } + + /// + /// Checks if cache entry exists/ + /// + /// The async. + /// Key. + public virtual async Task ExistsAsync(string key) + { + await initTask.ConfigureAwait(false); + + return entries.ContainsKey(key); + } + + /// + /// Adds the file to cache and file saving queue if not exists. + /// + /// Key. + /// Bytes. + /// Duration. + public virtual async Task AddToSavingQueueIfNotExistsAsync(string key, byte[] bytes, TimeSpan duration, Action writeFinished = null) + { + await initTask.ConfigureAwait(false); + + if (!fileWritePendingTasks.TryAdd(key, 1)) + return; + + await _currentWriteLock.WaitAsync().ConfigureAwait(false); // Make sure we don't add multiple continuations to the same task + + try + { + _currentWrite = _currentWrite.ContinueWith(async t => + { + await Task.Yield(); // forces it to be scheduled for later + + await initTask.ConfigureAwait(false); + + try + { + await fileWriteLock.WaitAsync().ConfigureAwait(false); + + CreateCacheDirIfNotExists(); + string filename = key + "." + (long)duration.TotalSeconds; + + var file = rootFolder.CreateFile(GetCacheFileName(filename)); + + //using (var fs = await file.OpenStreamForWriteAsync().ConfigureAwait(false)) + { + await file.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false); + } + + entries[key] = new CacheEntry(DateTime.UtcNow, duration, filename); + writeFinished?.Invoke(); + } + catch (Exception ex) // Since we don't observe the task (it's not awaited, we should catch all exceptions) + { + //TODO WinRT doesn't have Console + System.Diagnostics.Debug.WriteLine(string.Format("An error occured while caching to disk image '{0}'.", key)); + System.Diagnostics.Debug.WriteLine(ex.ToString()); + } + finally + { + byte finishedTask; + fileWritePendingTasks.TryRemove(key, out finishedTask); + fileWriteLock.Release(); + } + }); + } + finally + { + _currentWriteLock.Release(); + } + } + + /// + /// Tries to get cached file as stream. + /// + /// The get async. + /// Key. + public virtual async Task TryGetStreamAsync(string key) + { + await initTask.ConfigureAwait(false); + + await WaitForPendingWriteIfExists(key).ConfigureAwait(false); + + try + { + CacheEntry entry; + if (!entries.TryGetValue(key, out entry)) + return null; + + try + { + return GetFileStream(key); + } + catch (IOException) + { + CreateCacheDirIfNotExists(); + } + return null; + } + catch + { + return null; + } + } + + private Stream GetFileStream(string key) + { + var file = GetCacheFileName(key); + if (!rootFolder.FileExists(file)) + { + return null; + } + + return rootFolder.OpenFile(file, FileMode.Create, FileAccess.Read); + } + + private string GetCacheFileName(string file) + { + return $"{cacheFolderName}/{file}"; + } + /// + /// Removes the specified cache entry. + /// + /// Key. + public virtual async Task RemoveAsync(string key) + { + await initTask.ConfigureAwait(false); + + await WaitForPendingWriteIfExists(key).ConfigureAwait(false); + + CacheEntry oldCacheEntry; + if (entries.TryRemove(key, out oldCacheEntry)) + { + try + { + var file = GetCacheFileName(key); + if (rootFolder.FileExists(file)) + { + rootFolder.DeleteFile(file); + } + } + catch + { + } + } + } + + /// + /// Clears all cache entries. + /// + public virtual async Task ClearAsync() + { + await initTask.ConfigureAwait(false); + + while (fileWritePendingTasks.Count != 0) + { + await Task.Delay(20).ConfigureAwait(false); + } + + try + { + await fileWriteLock.WaitAsync().ConfigureAwait(false); + + //var entriesToRemove = rootFolder.GetFileNames($"{cacheFolderName}/*"); + //foreach (var item in entriesToRemove) + { + try + { + rootFolder.DeleteDirectory(cacheFolderName); + } + catch (FileNotFoundException) + { + } + } + } + catch (IOException) + { + CreateCacheDirIfNotExists(); + } + finally + { + entries.Clear(); + fileWriteLock.Release(); + } + } + + private string[] GetAllEntries() + { + return rootFolder.GetFileNames($"{cacheFolderName}/*"); + } + + protected virtual async Task WaitForPendingWriteIfExists(string key) + { + while (fileWritePendingTasks.ContainsKey(key)) + { + await Task.Delay(20).ConfigureAwait(false); + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Cache/WriteableBitmapLRUCache.cs b/source/FFImageLoading.Wpf/Cache/WriteableBitmapLRUCache.cs new file mode 100644 index 000000000..57b44e738 --- /dev/null +++ b/source/FFImageLoading.Wpf/Cache/WriteableBitmapLRUCache.cs @@ -0,0 +1,24 @@ +using FFImageLoading.Work; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Media.Imaging; +namespace FFImageLoading.Cache +{ + public class WriteableBitmapLRUCache : LRUCache> + { + public WriteableBitmapLRUCache(int capacity) : base(capacity) + { + } + + public override int GetValueSize(Tuple value) + { + if (value?.Item2 == null) + return 0; + + return value.Item2.CurrentHeight * value.Item2.CurrentWidth * 4; + } + } +} diff --git a/source/FFImageLoading.Wpf/DataResolvers/DataResolverFactory.cs b/source/FFImageLoading.Wpf/DataResolvers/DataResolverFactory.cs new file mode 100644 index 000000000..f25d70575 --- /dev/null +++ b/source/FFImageLoading.Wpf/DataResolvers/DataResolverFactory.cs @@ -0,0 +1,32 @@ +using FFImageLoading.Cache; +using FFImageLoading.Config; +using FFImageLoading.Work; +using System; + +namespace FFImageLoading.DataResolvers +{ + public class DataResolverFactory : IDataResolverFactory + { + public virtual IDataResolver GetResolver(string identifier, ImageSource source, TaskParameter parameters, Configuration configuration) + { + switch (source) + { + case ImageSource.ApplicationBundle: + case ImageSource.CompiledResource: + return new ResourceDataResolver(); + case ImageSource.Filepath: + return new FileDataResolver(); + case ImageSource.Url: + if (!string.IsNullOrWhiteSpace(identifier) && identifier.IsDataUrl()) + return new DataUrlResolver(); + return new UrlDataResolver(configuration); + case ImageSource.Stream: + return new StreamDataResolver(); + case ImageSource.EmbeddedResource: + return new EmbeddedResourceResolver(); + default: + throw new NotSupportedException("Unknown type of ImageSource"); + } + } + } +} diff --git a/source/FFImageLoading.Wpf/DataResolvers/FileDataResolver.cs b/source/FFImageLoading.Wpf/DataResolvers/FileDataResolver.cs new file mode 100644 index 000000000..d0d554a00 --- /dev/null +++ b/source/FFImageLoading.Wpf/DataResolvers/FileDataResolver.cs @@ -0,0 +1,30 @@ +using FFImageLoading.Work; +using System; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using FFImageLoading.IO; + +namespace FFImageLoading.DataResolvers +{ + public class FileDataResolver : IDataResolver + { + public virtual Task Resolve(string identifier, TaskParameter parameters, CancellationToken token) + { + if (!FileStore.Exists(identifier)) + { + throw new FileNotFoundException(identifier); + } + + token.ThrowIfCancellationRequested(); + + var stream = FileStore.GetInputStream(identifier, true); + + var imageInformation = new ImageInformation(); + imageInformation.SetPath(identifier); + imageInformation.SetFilePath(identifier); + + return Task.FromResult(new DataResolverResult(stream, LoadingResult.Disk, imageInformation)); + } + } +} diff --git a/source/FFImageLoading.Wpf/DataResolvers/ResourceDataResolver.cs b/source/FFImageLoading.Wpf/DataResolvers/ResourceDataResolver.cs new file mode 100644 index 000000000..a06cee8a9 --- /dev/null +++ b/source/FFImageLoading.Wpf/DataResolvers/ResourceDataResolver.cs @@ -0,0 +1,90 @@ +using FFImageLoading.Work; +using System; +using System.Threading; +using System.Threading.Tasks; +using System.IO; +using System.Collections.Generic; +using System.Windows; +using System.Windows.Media.Imaging; +using System.Windows.Resources; +using FFImageLoading.Extensions; + +namespace FFImageLoading.DataResolvers +{ + public class ResourceDataResolver : IDataResolver + { + private static readonly SemaphoreSlim _cacheLock = new SemaphoreSlim(1, 1); + private static Dictionary _cache = new Dictionary(128); + + public async virtual Task Resolve(string identifier, TaskParameter parameters, CancellationToken token) + { + StreamResourceInfo image = null; + await _cacheLock.WaitAsync(token).ConfigureAwait(false); + token.ThrowIfCancellationRequested(); + Uri imgUri=null; + try + { + string resPath = identifier.TrimStart('\\', '/'); + + if (!resPath.StartsWith(@"Assets\", StringComparison.OrdinalIgnoreCase) && !resPath.StartsWith("Assets/", StringComparison.OrdinalIgnoreCase)) + { + resPath = @"Assets\" + resPath; + } + + imgUri = new Uri($"pack://application:,,,/{resPath}"); + var key = imgUri.ToString(); + if (!_cache.TryGetValue(key, out image)) + { + image = Application.GetResourceStream(imgUri); + + //image = new BitmapImage(imgUri); + + if (_cache.Count >= 128) + _cache.Clear(); + + _cache[key] = image; + } + } + catch (Exception) + { + try + { + imgUri = new Uri($"pack://application:,,,/{identifier}"); + //imgUri = new Uri(identifier, UriKind.RelativeOrAbsolute); + var key = imgUri.ToString(); + if (!_cache.TryGetValue(key, out image)) + { + image = Application.GetResourceStream(imgUri); + + if (_cache.Count >= 128) + _cache.Clear(); + + _cache[key] = image; + } + } + catch (Exception) + { + } + } + finally + { + _cacheLock.Release(); + } + + if (image != null) + { + var imageInformation = new ImageInformation(); + imageInformation.SetPath(identifier); + imageInformation.SetFilePath(imgUri.ToString()); + + token.ThrowIfCancellationRequested(); + + var s = await image.Stream.AsRandomAccessStream(); + s.Seek(0, SeekOrigin.Begin); + return new DataResolverResult(s, LoadingResult.CompiledResource, imageInformation); + } + + throw new FileNotFoundException(identifier); + } + } +} diff --git a/source/FFImageLoading.Wpf/Decoders/BaseDecoder.cs b/source/FFImageLoading.Wpf/Decoders/BaseDecoder.cs new file mode 100644 index 000000000..dc64467a0 --- /dev/null +++ b/source/FFImageLoading.Wpf/Decoders/BaseDecoder.cs @@ -0,0 +1,39 @@ +using FFImageLoading.Config; +using FFImageLoading.Extensions; +using FFImageLoading.Helpers; +using FFImageLoading.Work; +using System; +using System.IO; +using System.Threading.Tasks; + +namespace FFImageLoading.Decoders +{ + public class BaseDecoder : IDecoder + { + public async Task> DecodeAsync(Stream imageData, string path, ImageSource source, ImageInformation imageInformation, TaskParameter parameters) + { + BitmapHolder imageIn = null; + + if (imageData == null) + throw new ArgumentNullException(nameof(imageData)); + + bool allowUpscale = parameters.AllowUpscale ?? Configuration.AllowUpscale; + + if (parameters.Transformations == null || parameters.Transformations.Count == 0) + { + var bitmap = await imageData.ToBitmapImageAsync(parameters.DownSampleSize, parameters.DownSampleUseDipUnits, parameters.DownSampleInterpolationMode, allowUpscale, imageInformation).ConfigureAwait(false); + imageIn = new BitmapHolder(bitmap); + } + else + { + imageIn = await imageData.ToBitmapHolderAsync(parameters.DownSampleSize, parameters.DownSampleUseDipUnits, parameters.DownSampleInterpolationMode, allowUpscale, imageInformation).ConfigureAwait(false); + } + + return new DecodedImage() { Image = imageIn }; + } + + public Configuration Configuration => ImageService.Instance.Config; + + public IMiniLogger Logger => ImageService.Instance.Config.Logger; + } +} diff --git a/source/FFImageLoading.Wpf/Extensions/ColorExtensions.cs b/source/FFImageLoading.Wpf/Extensions/ColorExtensions.cs new file mode 100644 index 000000000..4453a4b06 --- /dev/null +++ b/source/FFImageLoading.Wpf/Extensions/ColorExtensions.cs @@ -0,0 +1,86 @@ +using FFImageLoading.Helpers; +using System; + +namespace FFImageLoading.Extensions +{ + public static class ColorExtensions + { + public const int SizeOfArgb = 4; + + //public static int ToInt(this ColorHolder color) + //{ + // var col = 0; + + // if (color.A != 0) + // { + // var a = color.A + 1; + // col = (color.A << 24) + // | ((byte)((color.R * a) >> 8) << 16) + // | ((byte)((color.G * a) >> 8) << 8) + // | ((byte)((color.B * a) >> 8)); + // } + + // return col; + //} + + public static ColorHolder ToColorFromHex(this string hexColor) + { + if (string.IsNullOrWhiteSpace(hexColor)) + throw new ArgumentException("Invalid color string.", nameof(hexColor)); + + if (!hexColor.StartsWith("#", StringComparison.Ordinal)) + hexColor.Insert(0, "#"); + + switch (hexColor.Length) + { + case 9: + { + var cuint = Convert.ToUInt32(hexColor.Substring(1), 16); + var a = (byte)(cuint >> 24); + var r = (byte)((cuint >> 16) & 0xff); + var g = (byte)((cuint >> 8) & 0xff); + var b = (byte)(cuint & 0xff); + + return new ColorHolder(a, r, g, b); + } + case 7: + { + var cuint = Convert.ToUInt32(hexColor.Substring(1), 16); + var r = (byte)((cuint >> 16) & 0xff); + var g = (byte)((cuint >> 8) & 0xff); + var b = (byte)(cuint & 0xff); + + return new ColorHolder(255, r, g, b); + } + case 5: + { + var cuint = Convert.ToUInt16(hexColor.Substring(1), 16); + var a = (byte)(cuint >> 12); + var r = (byte)((cuint >> 8) & 0xf); + var g = (byte)((cuint >> 4) & 0xf); + var b = (byte)(cuint & 0xf); + a = (byte)(a << 4 | a); + r = (byte)(r << 4 | r); + g = (byte)(g << 4 | g); + b = (byte)(b << 4 | b); + + return new ColorHolder(a, r, g, b); + } + case 4: + { + var cuint = Convert.ToUInt16(hexColor.Substring(1), 16); + var r = (byte)((cuint >> 8) & 0xf); + var g = (byte)((cuint >> 4) & 0xf); + var b = (byte)(cuint & 0xf); + r = (byte)(r << 4 | r); + g = (byte)(g << 4 | g); + b = (byte)(b << 4 | b); + + return new ColorHolder(255, r, g, b); + } + default: + throw new FormatException(string.Format("The {0} string is not a recognized HexColor format.", hexColor)); + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Extensions/ImageExtensions.cs b/source/FFImageLoading.Wpf/Extensions/ImageExtensions.cs new file mode 100644 index 000000000..e7a9bb239 --- /dev/null +++ b/source/FFImageLoading.Wpf/Extensions/ImageExtensions.cs @@ -0,0 +1,173 @@ +using FFImageLoading.Work; +using System; +using System.IO; +using System.Threading.Tasks; +using System.Windows.Media; +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Extensions +{ + public static class ImageExtensions + { + public static async Task AsRandomAccessStream(this Stream from) + { + var ms = new MemoryStream(); + from.Seek(0, SeekOrigin.Begin); + await from.CopyToAsync(ms); + ms.Seek(0, SeekOrigin.Begin); + return ms; + } + public static async Task ToBitmapImageAsync(this BitmapHolder holder) + { + if (holder?.PixelData == null) + return null; + + WriteableBitmap writeableBitmap = null; + + await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(async () => + { + writeableBitmap = await holder.ToWriteableBitmap(); + }); + + return writeableBitmap; + } + + private static Task ToWriteableBitmap(this BitmapHolder holder) + { + var wb = new WriteableBitmap( + holder.Width, + holder.Height, + 96, + 96, + PixelFormats.Bgra32, + null); + return Task.FromResult(wb.FromByteArray(holder.PixelData)); + + } + public static Task ToWriteableBitmap(this Stream holder) + { + try + { + holder.Seek(0, SeekOrigin.Begin); + return Task.FromResult(BitmapFactory.FromStream(holder)); + } + catch (Exception ex) + { + throw; + } + } + + public async static Task ToBitmapImageAsync(this Stream imageStream, Tuple downscale, bool downscaleDipUnits, InterpolationMode mode, bool allowUpscale, ImageInformation imageInformation = null) + { + if (imageStream == null) + return null; + + using (var image = await imageStream.AsRandomAccessStream()) + { + if (downscale != null && (downscale.Item1 > 0 || downscale.Item2 > 0)) + { + using (var downscaledImage = await image.ResizeImage(downscale.Item1, downscale.Item2, mode, downscaleDipUnits, allowUpscale, imageInformation).ConfigureAwait(false)) + { + downscaledImage.Seek(0, SeekOrigin.Begin); + WriteableBitmap resizedBitmap = null; + + await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(async () => + { + resizedBitmap = await downscaledImage.ToWriteableBitmap(); + }); + + return resizedBitmap; + } + } + else + { + WriteableBitmap bitmap = null; + + await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(async () => + { + bitmap = await imageStream.ToWriteableBitmap(); + if (imageInformation != null) + { + imageInformation.SetCurrentSize(bitmap.PixelWidth, bitmap.PixelHeight); + imageInformation.SetOriginalSize(bitmap.PixelWidth, bitmap.PixelHeight); + } + }); + + return bitmap; + } + } + } + + public async static Task ToBitmapHolderAsync(this Stream imageStream, Tuple downscale, bool downscaleDipUnits, InterpolationMode mode, bool allowUpscale, ImageInformation imageInformation = null) + { + if (imageStream == null) + return null; + + + Stream src; + using (var image = await imageStream.AsRandomAccessStream()) + { + if (downscale != null && (downscale.Item1 > 0 || downscale.Item2 > 0)) + { + var downscaledImage = await image.ResizeImage(downscale.Item1, downscale.Item2, mode, + downscaleDipUnits, allowUpscale, imageInformation).ConfigureAwait(false); + { + src = downscaledImage; + } + } + else + { + src = image; + } + src.Seek(0, SeekOrigin.Begin); + var wb = BitmapFactory.FromStream(src); + + + if (imageInformation != null) + { + imageInformation.SetCurrentSize(wb.PixelWidth, wb.PixelHeight); + imageInformation.SetOriginalSize(wb.PixelWidth, wb.PixelHeight); + } + + return new BitmapHolder(BitmapFactory.ConvertToPbgra32Format(wb).ToByteArray(), wb.PixelWidth, wb.PixelHeight); + } + } + + public static async Task ResizeImage(this MemoryStream imageStream, int width, int height, InterpolationMode interpolationMode, bool useDipUnits, bool allowUpscale, ImageInformation imageInformation = null) + { + if (useDipUnits) + { + width = width.DpToPixels(); + height = height.DpToPixels(); + } + + var wb = await imageStream.ToWriteableBitmap(); + var widthRatio = (double)width / wb.PixelWidth; + var heightRatio = (double)height / wb.PixelHeight; + var scaleRatio = Math.Min(widthRatio, heightRatio); + if (width == 0) + scaleRatio = heightRatio; + + if (height == 0) + scaleRatio = widthRatio; + + var bitmap = new TransformedBitmap(wb, new ScaleTransform(scaleRatio,scaleRatio)); + + var bmp = new MemoryStream(); + BitmapEncoder enc = new BmpBitmapEncoder(); + enc.Frames.Add(BitmapFrame.Create(bitmap)); + enc.Save(bmp); + + if (imageInformation != null) + { + var aspectHeight = (int)Math.Floor(wb.PixelHeight * scaleRatio); + var aspectWidth = (int)Math.Floor(wb.PixelWidth * scaleRatio); + + imageInformation.SetOriginalSize(wb.PixelWidth, wb.PixelHeight); + imageInformation.SetCurrentSize(aspectWidth, aspectHeight); + } + bmp.Seek(0,SeekOrigin.Begin); + return bmp; + } + } +} diff --git a/source/FFImageLoading.Wpf/Extensions/TaskParameterPlatformExtensions.cs b/source/FFImageLoading.Wpf/Extensions/TaskParameterPlatformExtensions.cs new file mode 100644 index 000000000..cf9027856 --- /dev/null +++ b/source/FFImageLoading.Wpf/Extensions/TaskParameterPlatformExtensions.cs @@ -0,0 +1,131 @@ +using System; +using System.Threading.Tasks; +using FFImageLoading.Work; +using System.IO; +using System.Windows.Controls; +using System.Windows.Media.Imaging; +using FFImageLoading.Targets; +using FFImageLoading.Extensions; + +namespace FFImageLoading +{ + /// + /// TaskParameterPlatformExtensions + /// + public static class TaskParameterPlatformExtensions + { + /// + /// Loads the image into PNG Stream + /// + /// The PNG Stream async. + /// Parameters. + public static async Task AsPNGStreamAsync(this TaskParameter parameters) + { + var result = await AsWriteableBitmapAsync(parameters); + var stream = await result.AsPngStreamAsync(); + + return stream; + } + + /// + /// Loads the image into JPG Stream + /// + /// The JPG Stream async. + /// Parameters. + public static async Task AsJPGStreamAsync(this TaskParameter parameters, int quality = 80) + { + var result = await AsWriteableBitmapAsync(parameters); + var stream = await result.AsJpegStreamAsync(quality); + + return stream; + } + + /// + /// Loads the image into given Image using defined parameters. + /// + /// Parameters for loading the image. + /// Image view that should receive the image. + public static IScheduledWork Into(this TaskParameter parameters, Image imageView) + { + var target = new ImageTarget(imageView); + + if (parameters.Source != Work.ImageSource.Stream && string.IsNullOrWhiteSpace(parameters.Path)) + { + target.SetAsEmpty(null); + parameters.TryDispose(); + return null; + } + + var task = ImageService.CreateTask(parameters, target); + ImageService.Instance.LoadImage(task); + return task; + } + + /// + /// Loads the image into given Image using defined parameters. + /// IMPORTANT: It throws image loading exceptions - you should handle them + /// + /// An awaitable Task. + /// Parameters for loading the image. + /// Image view that should receive the image. + public static Task IntoAsync(this TaskParameter parameters, Image imageView) + { + var userErrorCallback = parameters.OnError; + var finishCallback = parameters.OnFinish; + var tcs = new TaskCompletionSource(); + + parameters + .Error(ex => + { + tcs.TrySetException(ex); + userErrorCallback?.Invoke(ex); + }) + .Finish(scheduledWork => + { + finishCallback?.Invoke(scheduledWork); + tcs.TrySetResult(scheduledWork); + }) + .Into(imageView); + + return tcs.Task; + } + + /// + /// Loads and gets WriteableBitmap using defined parameters. + /// IMPORTANT: It throws image loading exceptions - you should handle them + /// + /// The WriteableBitmap. + /// Parameters. + public static Task AsWriteableBitmapAsync(this TaskParameter parameters) + { + var target = new BitmapTarget(); + var userErrorCallback = parameters.OnError; + var finishCallback = parameters.OnFinish; + var tcs = new TaskCompletionSource(); + + parameters + .Error(ex => + { + tcs.TrySetException(ex); + userErrorCallback?.Invoke(ex); + }) + .Finish(scheduledWork => + { + finishCallback?.Invoke(scheduledWork); + tcs.TrySetResult(target.BitmapSource as WriteableBitmap); + }); + + if (parameters.Source != Work.ImageSource.Stream && string.IsNullOrWhiteSpace(parameters.Path)) + { + target.SetAsEmpty(null); + parameters.TryDispose(); + return null; + } + + var task = ImageService.CreateTask(parameters, target); + ImageService.Instance.LoadImage(task); + + return tcs.Task; + } + } +} diff --git a/source/FFImageLoading.Wpf/Extensions/UnitsExtensions.cs b/source/FFImageLoading.Wpf/Extensions/UnitsExtensions.cs new file mode 100644 index 000000000..ed3b8b447 --- /dev/null +++ b/source/FFImageLoading.Wpf/Extensions/UnitsExtensions.cs @@ -0,0 +1,15 @@ +using System; + +namespace FFImageLoading.Extensions +{ + public static class UnitsExtensions + { + public static int DpToPixels(this int dp) => ImageService.Instance.DpToPixels(dp); + + public static int DpToPixels(this double dp) => ImageService.Instance.DpToPixels(dp); + + public static double PixelsToDp(this int px) => ImageService.Instance.PixelsToDp(px); + + public static double PixelsToDp(this double px) => ImageService.Instance.PixelsToDp(px); + } +} diff --git a/source/FFImageLoading.Wpf/Extensions/WriteableBitmapExtensions.cs b/source/FFImageLoading.Wpf/Extensions/WriteableBitmapExtensions.cs new file mode 100644 index 000000000..548333585 --- /dev/null +++ b/source/FFImageLoading.Wpf/Extensions/WriteableBitmapExtensions.cs @@ -0,0 +1,47 @@ +using System; +using System.IO; +using System.Runtime.InteropServices.WindowsRuntime; +using System.Threading.Tasks; +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Extensions +{ + public static class WriteableBitmapExtensions + { + public static async Task AsPngStreamAsync(this WriteableBitmap bitmap) + { + Stream bmp = new MemoryStream(); + + BitmapEncoder enc = new PngBitmapEncoder(); + enc.Frames.Add(BitmapFrame.Create(bitmap)); + enc.Save(bmp); + + return bmp; + //using (var stream = bitmap.PixelBuffer.AsStream()) + //{ + // pixels = new byte[(uint)stream.Length]; + // await stream.ReadAsync(pixels, 0, pixels.Length); + //} + + //var raStream = new InMemoryRandomAccessStream(); + //// Encode pixels into stream + //var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, raStream); + //encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, (uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight, 96, 96, pixels); + //await encoder.FlushAsync(); + + //return raStream.AsStreamForRead(); + } + + public static async Task AsJpegStreamAsync(this WriteableBitmap bitmap, int quality = 90) + { + Stream bmp = new MemoryStream(); + + var enc = new JpegBitmapEncoder(); + enc.QualityLevel = quality; + enc.Frames.Add(BitmapFrame.Create(bitmap)); + enc.Save(bmp); + + return bmp; + } + } +} diff --git a/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj b/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj new file mode 100644 index 000000000..37fd48404 --- /dev/null +++ b/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj @@ -0,0 +1,95 @@ + + + + + Debug + AnyCPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E} + Library + Properties + FFImageLoading + FFImageLoading.Platform + v4.7.1 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + Latest + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + true + Latest + + + + + + + + + + + + + + + + + Extensions\TaskParameterExtensions.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {0ad3a755-399a-4527-a001-6192724c67bb} + FFImageLoading + + + + + + + + 1.6.2 + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Wpf/FFImageSourceBinding.cs b/source/FFImageLoading.Wpf/FFImageSourceBinding.cs new file mode 100644 index 000000000..fb7928db2 --- /dev/null +++ b/source/FFImageLoading.Wpf/FFImageSourceBinding.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace FFImageLoading +{ + public class FFImageSourceBinding + { + public FFImageSourceBinding(Work.ImageSource imageSource, string path) + { + ImageSource = imageSource; + Path = path; + } + + public Work.ImageSource ImageSource { get; private set; } + + public string Path { get; private set; } + + internal static async Task GetImageSourceBinding(string source) + { + if (string.IsNullOrWhiteSpace(source)) + { + return null; + } + + Uri uri; + if (!Uri.TryCreate(source, UriKind.Absolute, out uri) || uri.Scheme == "file") + { + var isFile = await Cache.FFSourceBindingCache.IsFileAsync(source); + if (isFile) + { + return new FFImageSourceBinding(Work.ImageSource.Filepath, source); + } + + return new FFImageSourceBinding(Work.ImageSource.CompiledResource, source); + } + + return new FFImageSourceBinding(Work.ImageSource.Url, source); + } + + public override bool Equals(object obj) + { + var item = obj as FFImageSourceBinding; + + if (item == null) + { + return false; + } + + return this.ImageSource.Equals(item.ImageSource) && this.Path.Equals(item.Path); + } + + public override int GetHashCode() + { + unchecked + { + int hash = 17; + hash = hash * 23 + this.ImageSource.GetHashCode(); + hash = hash * 23 + Path.GetHashCode(); + return hash; + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Helpers/ColorHolder.cs b/source/FFImageLoading.Wpf/Helpers/ColorHolder.cs new file mode 100644 index 000000000..8ac36432f --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/ColorHolder.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFImageLoading +{ + public struct ColorHolder + { + public ColorHolder(int a, int r, int g, int b) + { + A = Convert.ToByte(Math.Min(Math.Max(0, a), 255)); + + if (a > 0) + { + R = Convert.ToByte(Math.Min(Math.Max(0, r), 255)); + G = Convert.ToByte(Math.Min(Math.Max(0, g), 255)); + B = Convert.ToByte(Math.Min(Math.Max(0, b), 255)); + } + else + { + R = 0; + G = 0; + B = 0; + } + } + + public ColorHolder(int r, int g, int b) + { + A = 255; + R = Convert.ToByte(Math.Min(Math.Max(0, r), 255)); + G = Convert.ToByte(Math.Min(Math.Max(0, g), 255)); + B = Convert.ToByte(Math.Min(Math.Max(0, b), 255)); + } + + public readonly byte A; + + public readonly byte R; + + public readonly byte G; + + public readonly byte B; + + public static readonly ColorHolder Transparent = new ColorHolder(0, 0, 0, 0); + } +} diff --git a/source/FFImageLoading.Wpf/Helpers/MD5Helper.cs b/source/FFImageLoading.Wpf/Helpers/MD5Helper.cs new file mode 100644 index 000000000..356e9161c --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/MD5Helper.cs @@ -0,0 +1,50 @@ +using System; +using System.IO; +using System.Security.Cryptography; +using System.Text; + +namespace FFImageLoading.Helpers +{ + public class MD5Helper : IMD5Helper + { + public string MD5(Stream input) + { + using (var hashProvider = new MD5CryptoServiceProvider()) + { + var bytes = hashProvider.ComputeHash(input); + return BitConverter.ToString(bytes)?.ToSanitizedKey(); + } + } + + public string MD5(string input) + { + using (var hashProvider = new MD5CryptoServiceProvider()) + { + var bytes = hashProvider.ComputeHash(Encoding.UTF8.GetBytes(input)); + return BitConverter.ToString(bytes)?.ToSanitizedKey(); + } + + } + //public static byte[] StreamToByteArray(Stream stream) + //{ + // if (stream is MemoryStream) + // { + // return ((MemoryStream)stream).ToArray(); + // } + // else + // { + // return ReadFully(stream); + // } + //} + + //public static byte[] ReadFully(Stream input) + //{ + // using (MemoryStream ms = new MemoryStream()) + // { + // input.CopyTo(ms); + // return ms.ToArray(); + // } + //} + } +} + diff --git a/source/FFImageLoading.Wpf/Helpers/MainThreadDispatcher.cs b/source/FFImageLoading.Wpf/Helpers/MainThreadDispatcher.cs new file mode 100644 index 000000000..226c05c48 --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/MainThreadDispatcher.cs @@ -0,0 +1,87 @@ +using System; +using System.Threading.Tasks; +using System.Windows.Threading; + +namespace FFImageLoading.Helpers +{ + public class MainThreadDispatcher : IMainThreadDispatcher + { + private Dispatcher _dispatcher; + + public async void Post(Action action) + { + if (action == null) + return; + + if(_dispatcher == null) + { + _dispatcher = System.Windows.Application.Current.Dispatcher; + } + + // already in UI thread: + if (_dispatcher.CheckAccess()) + { + action(); + } + // not in UI thread, ensuring UI thread: + else + { + //var tcs = new TaskCompletionSource(); + //Post(() => + //{ + // try + // { + // action?.Invoke(); + // tcs.SetResult(true); + // } + // catch (Exception ex) + // { + // tcs.SetException(ex); + // } + //}); + + //await tcs.Task; + await _dispatcher.InvokeAsync(() => action()); + //await CoreApplication.GetCurrentView().Dispatcher.RunAsync(CoreDispatcherPriority.Low, () => action()); + } + } + + public Task PostAsync(Action action) + { + var tcs = new TaskCompletionSource(); + Post(() => + { + try + { + action?.Invoke(); + tcs.SetResult(true); + } + catch (Exception ex) + { + tcs.SetException(ex); + } + }); + + return tcs.Task; + } + + public Task PostAsync(Func action) + { + var tcs = new TaskCompletionSource(); + Post(async () => + { + try + { + await action?.Invoke(); + tcs.SetResult(true); + } + catch (Exception ex) + { + tcs.SetException(ex); + } + }); + + return tcs.Task; + } + } +} diff --git a/source/FFImageLoading.Wpf/Helpers/MiniLogger.cs b/source/FFImageLoading.Wpf/Helpers/MiniLogger.cs new file mode 100644 index 000000000..94d25efe3 --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/MiniLogger.cs @@ -0,0 +1,30 @@ +using System; +using System.Diagnostics; + +namespace FFImageLoading.Helpers +{ + internal class MiniLogger : IMiniLogger + { + public void Debug(string message) + { + DebugInternal(message); + } + + public void Error(string errorMessage) + { + System.Diagnostics.Debug.WriteLine(errorMessage); + } + + public void Error(string errorMessage, Exception ex) + { + System.Diagnostics.Debug.WriteLine(errorMessage + Environment.NewLine + ex.ToString()); + } + + [Conditional("DEBUG")] + private void DebugInternal(string message) + { + System.Diagnostics.Debug.WriteLine(message); + } + } +} + diff --git a/source/FFImageLoading.Wpf/Helpers/PlatformPerformance.cs b/source/FFImageLoading.Wpf/Helpers/PlatformPerformance.cs new file mode 100644 index 000000000..9e57392be --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/PlatformPerformance.cs @@ -0,0 +1,27 @@ +using System; + +namespace FFImageLoading +{ + public class PlatformPerformance : IPlatformPerformance + { + public PlatformPerformance() + { + } + + public int GetCurrentManagedThreadId() + { + return 0; + } + + public int GetCurrentSystemThreadId() + { + return 0; + } + + public string GetMemoryInfo() + { + return "[PERFORMANCE] Memory - not implemented"; + } + } +} + diff --git a/source/FFImageLoading.Wpf/Helpers/ScaleHelper.cs b/source/FFImageLoading.Wpf/Helpers/ScaleHelper.cs new file mode 100644 index 000000000..1ad83e647 --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/ScaleHelper.cs @@ -0,0 +1,50 @@ +using System; +using System.Reflection; +using System.Threading; +using System.Threading.Tasks; + +namespace FFImageLoading.Helpers +{ + public static class ScaleHelper + { + static double? _scale; + public static double Scale + { + get + { + if (!_scale.HasValue) + { + InitAsync().ConfigureAwait(false).GetAwaiter().GetResult(); + } + + return _scale.Value; + } + } + + public static async Task InitAsync() + { + if (_scale.HasValue) + return; + + var dispatcher = ImageService.Instance.Config.MainThreadDispatcher; + + await dispatcher.PostAsync(() => + { + //var displayInfo = DisplayInformation.GetForCurrentView(); + object found = null; + + //todo + //try + //{ + // found = displayInfo.GetType().GetRuntimeProperty("RawPixelsPerViewPixel")?.GetValue(displayInfo); + //} + //catch (Exception) + //{ + //} + + _scale = found == null ? 1d : (double)found; + }).ConfigureAwait(false); + } + } +} + diff --git a/source/FFImageLoading.Wpf/ImageService.cs b/source/FFImageLoading.Wpf/ImageService.cs new file mode 100644 index 000000000..3fed3b8b2 --- /dev/null +++ b/source/FFImageLoading.Wpf/ImageService.cs @@ -0,0 +1,141 @@ +using System; +using System.IO; +using FFImageLoading.Config; +using FFImageLoading.Cache; +using FFImageLoading.Helpers; +using FFImageLoading.Work; +using FFImageLoading.DataResolvers; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Windows.Controls; +using System.Windows.Media.Imaging; + +namespace FFImageLoading +{ + /// + /// FFImageLoading by Daniel Luberda + /// + //[Preserve(AllMembers = true)] + public class ImageService : ImageServiceBase + { + static ConditionalWeakTable _viewsReferences = new ConditionalWeakTable(); + static IImageService _instance; + + /// + /// FFImageLoading instance. + /// + /// The instance. + public static IImageService Instance + { + get + { + if (_instance == null) + _instance = new ImageService(); + + return _instance; + } + } + + protected override void PlatformSpecificConfiguration(Config.Configuration configuration) + { + base.PlatformSpecificConfiguration(configuration); + + configuration.ClearMemoryCacheOnOutOfMemory = false; + configuration.ExecuteCallbacksOnUIThread = true; + } + + protected override IMemoryCache MemoryCache => ImageCache.Instance; + protected override IMD5Helper CreatePlatformMD5HelperInstance(Configuration configuration) => new MD5Helper(); + protected override IMiniLogger CreatePlatformLoggerInstance(Configuration configuration) => new MiniLogger(); + protected override IPlatformPerformance CreatePlatformPerformanceInstance(Configuration configuration) => new PlatformPerformance(); + protected override IMainThreadDispatcher CreateMainThreadDispatcherInstance(Configuration configuration) => new MainThreadDispatcher(); + protected override IDataResolverFactory CreateDataResolverFactoryInstance(Configuration configuration) => new DataResolverFactory(); + + protected override IDiskCache CreatePlatformDiskCacheInstance(Configuration configuration) + { + if (string.IsNullOrWhiteSpace(configuration.DiskCachePath)) + { + var data = Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData); + //todo include app name + var cachePath = Path.Combine(data, "FFSimpleDiskCache"); + + configuration.DiskCachePath = cachePath; + } + + if (!Directory.Exists(configuration.DiskCachePath)) + { + Directory.CreateDirectory(configuration.DiskCachePath); + } + + return new SimpleDiskCache(configuration.DiskCachePath, configuration); + } + + internal static IImageLoaderTask CreateTask(TaskParameter parameters, ITarget target) where TImageView : class + { + return new PlatformImageLoaderTask(target, parameters, Instance); + } + + internal static IImageLoaderTask CreateTask(TaskParameter parameters) + { + return new PlatformImageLoaderTask(null, parameters, Instance); + } + + protected override void SetTaskForTarget(IImageLoaderTask currentTask) + { + var targetView = currentTask?.Target?.TargetControl; + + if (!(targetView is Image)) + return; + + lock (_viewsReferences) + { + if (_viewsReferences.TryGetValue(targetView, out var existingTask)) + { + try + { + if (existingTask != null && !existingTask.IsCancelled && !existingTask.IsCompleted) + { + existingTask.Cancel(); + } + } + catch (ObjectDisposedException) { } + + _viewsReferences.Remove(targetView); + } + + _viewsReferences.Add(targetView, currentTask); + } + } + + public override void CancelWorkForView(object view) + { + lock (_viewsReferences) + { + if (_viewsReferences.TryGetValue(view, out var existingTask)) + { + try + { + if (existingTask != null && !existingTask.IsCancelled && !existingTask.IsCompleted) + { + existingTask.Cancel(); + } + } + catch (ObjectDisposedException) { } + } + } + } + + public override int DpToPixels(double dp) + { + return (int)Math.Floor(dp * ScaleHelper.Scale); + } + + public override double PixelsToDp(double px) + { + if (Math.Abs(px) < double.Epsilon) + return 0d; + + return Math.Floor(px / ScaleHelper.Scale); + } + } +} diff --git a/source/FFImageLoading.Wpf/Properties/AssemblyInfo.cs b/source/FFImageLoading.Wpf/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..56a5a497f --- /dev/null +++ b/source/FFImageLoading.Wpf/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FFImageLoading.Wpf")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FFImageLoading.Wpf")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("dc06c582-6c7e-4018-a752-feb528c65f7e")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/FFImageLoading.Wpf/Targets/BitmapTarget.cs b/source/FFImageLoading.Wpf/Targets/BitmapTarget.cs new file mode 100644 index 000000000..6f8a7c1d1 --- /dev/null +++ b/source/FFImageLoading.Wpf/Targets/BitmapTarget.cs @@ -0,0 +1,35 @@ +using System; +using System.Windows.Media.Imaging; +using FFImageLoading.Work; + +namespace FFImageLoading.Targets +{ + public class BitmapTarget: Target + { + private WeakReference _imageWeakReference = null; + + public override void Set(IImageLoaderTask task, BitmapSource image, bool animated) + { + if (task == null || task.IsCancelled) + return; + + if (_imageWeakReference == null) + _imageWeakReference = new WeakReference(image); + else + _imageWeakReference.SetTarget(image); + } + + public BitmapSource BitmapSource + { + get + { + if (_imageWeakReference == null) + return null; + + BitmapSource image = null; + _imageWeakReference.TryGetTarget(out image); + return image; + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Targets/ImageTarget.cs b/source/FFImageLoading.Wpf/Targets/ImageTarget.cs new file mode 100644 index 000000000..63914eece --- /dev/null +++ b/source/FFImageLoading.Wpf/Targets/ImageTarget.cs @@ -0,0 +1,106 @@ +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media.Animation; +using System.Windows.Media.Imaging; +using FFImageLoading.Work; + +namespace FFImageLoading.Targets +{ + public class ImageTarget : Target + { + private readonly WeakReference _controlWeakReference; + + public ImageTarget(Image control) + { + _controlWeakReference = new WeakReference(control); + } + + public override bool IsValid + { + get + { + return Control != null; + } + } + + public override void SetAsEmpty(IImageLoaderTask task) + { + var control = Control; + if (control == null) + return; + + control.Source = null; + } + + public override void Set(IImageLoaderTask task, BitmapSource image, bool animated) + { + if (task.IsCancelled) + return; + + var control = Control; + if (control == null || control.Source == image) + return; + + var parameters = task.Parameters; + + if (animated) + { + // fade animation + int fadeDuration = parameters.FadeAnimationDuration.HasValue ? + parameters.FadeAnimationDuration.Value : ImageService.Instance.Config.FadeAnimationDuration; + DoubleAnimation fade = new DoubleAnimation(); + fade.Duration = TimeSpan.FromMilliseconds(fadeDuration); + fade.From = 0f; + fade.To = 1f; + fade.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseInOut }; + + Storyboard fadeInStoryboard = new Storyboard(); + //todo + Storyboard.SetTargetProperty(fade, new PropertyPath("Opacity")); + Storyboard.SetTarget(fade, control); + fadeInStoryboard.Children.Add(fade); + fadeInStoryboard.Begin(); + control.Source = image; + if (IsLayoutNeeded(task)) + control.UpdateLayout(); + } + else + { + control.Source = image; + if (IsLayoutNeeded(task)) + control.UpdateLayout(); + } + } + + bool IsLayoutNeeded(IImageLoaderTask task) + { + if (task.Parameters.InvalidateLayoutEnabled.HasValue) + { + if (!task.Parameters.InvalidateLayoutEnabled.Value) + return false; + } + else if (!task.Configuration.InvalidateLayout) + { + return false; + } + + return true; + } + + public override Image Control + { + get + { + Image control; + if (!_controlWeakReference.TryGetTarget(out control)) + return null; + + if (control == null) + return null; + + return control; + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Transformations/TransformationBase.cs b/source/FFImageLoading.Wpf/Transformations/TransformationBase.cs new file mode 100644 index 000000000..6560046e2 --- /dev/null +++ b/source/FFImageLoading.Wpf/Transformations/TransformationBase.cs @@ -0,0 +1,21 @@ +using System; +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public abstract class TransformationBase : ITransformation + { + public abstract string Key { get; } + + public IBitmap Transform(IBitmap bitmapHolder, string path, ImageSource source, bool isPlaceholder, string key) + { + var nativeHolder = bitmapHolder.ToNative(); + return Transform(nativeHolder, path, source, isPlaceholder, key); + } + + protected virtual BitmapHolder Transform(BitmapHolder bitmapHolder, string path, ImageSource source, bool isPlaceholder, string key) + { + return bitmapHolder; + } + } +} diff --git a/source/FFImageLoading.Wpf/Work/BitmapHolder.cs b/source/FFImageLoading.Wpf/Work/BitmapHolder.cs new file mode 100644 index 000000000..feb07867d --- /dev/null +++ b/source/FFImageLoading.Wpf/Work/BitmapHolder.cs @@ -0,0 +1,87 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Helpers; +using System; +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Work +{ + public class BitmapHolder : IBitmap + { + public BitmapHolder(WriteableBitmap bitmap) + { + WriteableBitmap = bitmap; + } + + public BitmapHolder(byte[] pixels, int width, int height) + { + PixelData = pixels; + Width = width; + Height = height; + } + + public bool HasWriteableBitmap => WriteableBitmap != null; + + public WriteableBitmap WriteableBitmap { get; private set; } + + public int Height { get; private set; } + + public int Width { get; private set; } + + public byte[] PixelData { get; private set; } + + public int PixelCount { get { return (int)(PixelData.Length / 4); } } + + public void SetPixel(int x, int y, ColorHolder color) + { + int pixelPos = (y * Width + x); + SetPixel(pixelPos, color); + } + + public void SetPixel(int pos, ColorHolder color) + { + try + { + int bytePos = pos * 4; + PixelData[bytePos] = color.B; + PixelData[bytePos + 1] = color.G; + PixelData[bytePos + 2] = color.R; + PixelData[bytePos + 3] = color.A; + } + catch (Exception ex) + { + throw; + } + } + + public ColorHolder GetPixel(int pos) + { + int bytePos = pos * 4; + var b = PixelData[bytePos]; + var g = PixelData[bytePos + 1]; + var r = PixelData[bytePos + 2]; + var a = PixelData[bytePos + 3]; + + return new ColorHolder(a, r, g, b); + } + + public ColorHolder GetPixel(int x, int y) + { + int pixelPos = (y * Width + x); + return GetPixel(pixelPos); + } + + public void FreePixels() + { + PixelData = null; + WriteableBitmap = null; + } + } + + public static class IBitmapExtensions + { + public static BitmapHolder ToNative(this IBitmap bitmap) + { + return (BitmapHolder)bitmap; + } + } +} diff --git a/source/FFImageLoading.Wpf/Work/PlatformImageLoaderTask.cs b/source/FFImageLoading.Wpf/Work/PlatformImageLoaderTask.cs new file mode 100644 index 000000000..244d08220 --- /dev/null +++ b/source/FFImageLoading.Wpf/Work/PlatformImageLoaderTask.cs @@ -0,0 +1,122 @@ +using FFImageLoading.Cache; +using FFImageLoading.Config; +using FFImageLoading.Extensions; +using FFImageLoading.Helpers; +using System; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using FFImageLoading.Decoders; +using System.Collections.Generic; +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Work +{ + public class PlatformImageLoaderTask : ImageLoaderTask where TImageView : class + { + static readonly SemaphoreSlim _decodingLock = new SemaphoreSlim(1, 1); + + public PlatformImageLoaderTask(ITarget target, TaskParameter parameters, IImageService imageService) : base(ImageCache.Instance, target, parameters, imageService) + { + } + + public async override Task Init() + { + await ScaleHelper.InitAsync(); + await base.Init(); + } + + protected override Task SetTargetAsync(BitmapSource image, bool animated) + { + if (Target == null) + return Task.FromResult(true); + + return MainThreadDispatcher.PostAsync(() => + { + ThrowIfCancellationRequested(); + PlatformTarget.Set(this, image, animated); + }); + } + + protected override int DpiToPixels(int size) + { + return size.DpToPixels(); + } + + protected override IDecoder ResolveDecoder(ImageInformation.ImageType type) + { + switch (type) + { + case ImageInformation.ImageType.WEBP: + throw new NotImplementedException(); + default: + return new BaseDecoder(); + } + } + + protected override async Task TransformAsync(BitmapHolder bitmap, IList transformations, string path, ImageSource source, bool isPlaceholder) + { + await _decodingLock.WaitAsync(CancellationTokenSource.Token).ConfigureAwait(false); // Applying transformations is both CPU and memory intensive + ThrowIfCancellationRequested(); + + try + { + foreach (var transformation in transformations) + { + ThrowIfCancellationRequested(); + + var old = bitmap; + + try + { + IBitmap bitmapHolder = transformation.Transform(bitmap, path, source, isPlaceholder, Key); + bitmap = bitmapHolder.ToNative(); + } + catch (Exception ex) + { + Logger.Error(string.Format("Transformation failed: {0}", transformation.Key), ex); + throw; + } + finally + { + if (old != null && old != bitmap && old.PixelData != bitmap.PixelData) + { + old.FreePixels(); + old = null; + } + } + } + } + finally + { + _decodingLock.Release(); + } + + return bitmap; + } + + protected override async Task GenerateImageFromDecoderContainerAsync(IDecodedImage decoded, ImageInformation imageInformation, bool isPlaceholder) + { + if (decoded.IsAnimated) + { + throw new NotImplementedException(); + } + else + { + try + { + if (decoded.Image.HasWriteableBitmap) + return decoded.Image.WriteableBitmap; + + return await decoded.Image.ToBitmapImageAsync(); + } + finally + { + decoded.Image.FreePixels(); + decoded.Image = null; + } + } + } + } +} From a1efd2f07a39d709452e5d01ff139c17a9865ade Mon Sep 17 00:00:00 2001 From: evlentev Date: Thu, 4 Apr 2019 17:34:36 +0300 Subject: [PATCH 02/15] wpf support --- FFImageLoading.sln | 108 ++++++ .../ImageLoading.Forms.Sample/Wpf/App.config | 6 + .../ImageLoading.Forms.Sample/Wpf/App.xaml | 9 + .../ImageLoading.Forms.Sample/Wpf/App.xaml.cs | 35 ++ .../Wpf/Assets/error.png | Bin 0 -> 2590 bytes .../Wpf/Assets/loading.png | Bin 0 -> 3820 bytes .../Wpf/Assets/sample.svg | 201 ++++++++++ .../FFImageLoading.Forms.Sample.Wpf.csproj | 137 +++++++ .../Wpf/MainWindow.xaml | 14 + .../Wpf/MainWindow.xaml.cs | 32 ++ .../Wpf/Properties/AssemblyInfo.cs | 55 +++ .../Wpf/Properties/Resources.Designer.cs | 71 ++++ .../Wpf/Properties/Resources.resx | 117 ++++++ .../Wpf/Properties/Settings.Designer.cs | 30 ++ .../Wpf/Properties/Settings.settings | 7 + .../CachedImageRenderer.cs | 350 ++++++++++++++++++ .../FFImageLoading.Forms.Wpf.csproj | 74 ++++ .../ImageSourceBinding.cs | 150 ++++++++ .../Properties/AssemblyInfo.cs | 36 ++ .../BlurredTransformation.cs | 126 +++++++ .../CircleTransformation.cs | 31 ++ .../ColorFillTransformation.cs | 47 +++ .../ColorSpaceTransformation.cs | 103 ++++++ .../CornerTransformType.cs | 31 ++ .../CornersTransformation.cs | 251 +++++++++++++ .../CropTransformation.cs | 125 +++++++ .../FFImageLoading.Transformations.Wpf.csproj | 72 ++++ .../FlipTransformation.cs | 66 ++++ .../FlipType.cs | 11 + .../GrayscaleTransformation.cs | 46 +++ .../Helpers/Helpers.cs | 12 + .../Properties/AssemblyInfo.cs | 36 ++ .../RotateTransformation.cs | 193 ++++++++++ .../RoundedTransformation.cs | 259 +++++++++++++ .../SepiaTransformation.cs | 55 +++ .../TintTransformation.cs | 109 ++++++ .../Cache/FFSourceBindingCache.cs | 53 +++ .../FFImageLoading.Wpf/Cache/IImageCache.cs | 8 + source/FFImageLoading.Wpf/Cache/ImageCache.cs | 110 ++++++ source/FFImageLoading.Wpf/Cache/LRUCache.cs | 182 +++++++++ .../Cache/SimpleDiskCache.cs | 343 +++++++++++++++++ .../Cache/WriteableBitmapLRUCache.cs | 24 ++ .../DataResolvers/DataResolverFactory.cs | 32 ++ .../DataResolvers/FileDataResolver.cs | 30 ++ .../DataResolvers/ResourceDataResolver.cs | 90 +++++ .../Decoders/BaseDecoder.cs | 39 ++ .../Extensions/ColorExtensions.cs | 86 +++++ .../Extensions/ImageExtensions.cs | 173 +++++++++ .../TaskParameterPlatformExtensions.cs | 131 +++++++ .../Extensions/UnitsExtensions.cs | 15 + .../Extensions/WriteableBitmapExtensions.cs | 47 +++ .../FFImageLoading.Wpf.csproj | 95 +++++ .../FFImageSourceBinding.cs | 64 ++++ .../FFImageLoading.Wpf/Helpers/ColorHolder.cs | 47 +++ .../FFImageLoading.Wpf/Helpers/MD5Helper.cs | 50 +++ .../Helpers/MainThreadDispatcher.cs | 87 +++++ .../FFImageLoading.Wpf/Helpers/MiniLogger.cs | 30 ++ .../Helpers/PlatformPerformance.cs | 27 ++ .../FFImageLoading.Wpf/Helpers/ScaleHelper.cs | 50 +++ source/FFImageLoading.Wpf/ImageService.cs | 141 +++++++ .../Properties/AssemblyInfo.cs | 36 ++ .../Targets/BitmapTarget.cs | 35 ++ .../FFImageLoading.Wpf/Targets/ImageTarget.cs | 106 ++++++ .../Transformations/TransformationBase.cs | 21 ++ .../FFImageLoading.Wpf/Work/BitmapHolder.cs | 87 +++++ .../Work/PlatformImageLoaderTask.cs | 122 ++++++ 66 files changed, 5366 insertions(+) create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/App.config create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/App.xaml create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/App.xaml.cs create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/Assets/error.png create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/Assets/loading.png create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/Assets/sample.svg create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml.cs create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/Properties/AssemblyInfo.cs create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.Designer.cs create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.resx create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.Designer.cs create mode 100644 samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.settings create mode 100644 source/FFImageLoading.Forms.Wpf/CachedImageRenderer.cs create mode 100644 source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj create mode 100644 source/FFImageLoading.Forms.Wpf/ImageSourceBinding.cs create mode 100644 source/FFImageLoading.Forms.Wpf/Properties/AssemblyInfo.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/BlurredTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/CircleTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/ColorFillTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/ColorSpaceTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/CornerTransformType.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/CornersTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/CropTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/FFImageLoading.Transformations.Wpf.csproj create mode 100644 source/FFImageLoading.Transformations.Wpf/FlipTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/FlipType.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/GrayscaleTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/Helpers/Helpers.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/Properties/AssemblyInfo.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/RotateTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/RoundedTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/SepiaTransformation.cs create mode 100644 source/FFImageLoading.Transformations.Wpf/TintTransformation.cs create mode 100644 source/FFImageLoading.Wpf/Cache/FFSourceBindingCache.cs create mode 100644 source/FFImageLoading.Wpf/Cache/IImageCache.cs create mode 100644 source/FFImageLoading.Wpf/Cache/ImageCache.cs create mode 100644 source/FFImageLoading.Wpf/Cache/LRUCache.cs create mode 100644 source/FFImageLoading.Wpf/Cache/SimpleDiskCache.cs create mode 100644 source/FFImageLoading.Wpf/Cache/WriteableBitmapLRUCache.cs create mode 100644 source/FFImageLoading.Wpf/DataResolvers/DataResolverFactory.cs create mode 100644 source/FFImageLoading.Wpf/DataResolvers/FileDataResolver.cs create mode 100644 source/FFImageLoading.Wpf/DataResolvers/ResourceDataResolver.cs create mode 100644 source/FFImageLoading.Wpf/Decoders/BaseDecoder.cs create mode 100644 source/FFImageLoading.Wpf/Extensions/ColorExtensions.cs create mode 100644 source/FFImageLoading.Wpf/Extensions/ImageExtensions.cs create mode 100644 source/FFImageLoading.Wpf/Extensions/TaskParameterPlatformExtensions.cs create mode 100644 source/FFImageLoading.Wpf/Extensions/UnitsExtensions.cs create mode 100644 source/FFImageLoading.Wpf/Extensions/WriteableBitmapExtensions.cs create mode 100644 source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj create mode 100644 source/FFImageLoading.Wpf/FFImageSourceBinding.cs create mode 100644 source/FFImageLoading.Wpf/Helpers/ColorHolder.cs create mode 100644 source/FFImageLoading.Wpf/Helpers/MD5Helper.cs create mode 100644 source/FFImageLoading.Wpf/Helpers/MainThreadDispatcher.cs create mode 100644 source/FFImageLoading.Wpf/Helpers/MiniLogger.cs create mode 100644 source/FFImageLoading.Wpf/Helpers/PlatformPerformance.cs create mode 100644 source/FFImageLoading.Wpf/Helpers/ScaleHelper.cs create mode 100644 source/FFImageLoading.Wpf/ImageService.cs create mode 100644 source/FFImageLoading.Wpf/Properties/AssemblyInfo.cs create mode 100644 source/FFImageLoading.Wpf/Targets/BitmapTarget.cs create mode 100644 source/FFImageLoading.Wpf/Targets/ImageTarget.cs create mode 100644 source/FFImageLoading.Wpf/Transformations/TransformationBase.cs create mode 100644 source/FFImageLoading.Wpf/Work/BitmapHolder.cs create mode 100644 source/FFImageLoading.Wpf/Work/PlatformImageLoaderTask.cs diff --git a/FFImageLoading.sln b/FFImageLoading.sln index 38646eb5e..e2abc1fce 100644 --- a/FFImageLoading.sln +++ b/FFImageLoading.sln @@ -130,6 +130,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Mac.Sample", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.WinUWP", "samples\ImageLoading.Forms.Sample\WinUWP\FFImageLoading.Forms.Sample.WinUWP.csproj", "{8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Wpf", "source\FFImageLoading.Forms.Wpf\FFImageLoading.Forms.Wpf.csproj", "{0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Wpf", "source\FFImageLoading.Transformations.Wpf\FFImageLoading.Transformations.Wpf.csproj", "{A63B1175-5FB5-4A9C-BCC5-8AC091876D04}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Wpf", "source\FFImageLoading.Wpf\FFImageLoading.Wpf.csproj", "{DC06C582-6C7E-4018-A752-FEB528C65F7E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Wpf", "samples\ImageLoading.Forms.Sample\Wpf\FFImageLoading.Forms.Sample.Wpf.csproj", "{9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}" +EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution source\FFImageLoading.Cross\FFImageLoading.Cross.projitems*{1597f7d4-432c-4f26-b508-0f6faf0b9711}*SharedItemsImports = 4 @@ -143,6 +151,7 @@ Global source\FFImageLoading.Svg.Forms.Shared\FFImageLoading.Svg.Forms.Shared.projitems*{6d4f9dfa-012e-4966-a6e8-01c3464b537e}*SharedItemsImports = 4 source\FFImageLoading.Cross\FFImageLoading.Cross.projitems*{74bf9402-3e13-4003-8923-bc20a1294ce2}*SharedItemsImports = 4 source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{74bf9402-3e13-4003-8923-bc20a1294ce2}*SharedItemsImports = 4 + source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{dc06c582-6c7e-4018-a752-feb528c65f7e}*SharedItemsImports = 4 source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{e72ac4ed-03a8-465c-95a2-38b0544b37db}*SharedItemsImports = 13 EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -1265,6 +1274,102 @@ Global {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.ActiveCfg = Release|x86 {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.Build.0 = Release|x86 {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.Deploy.0 = Release|x86 + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|ARM.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|ARM.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhone.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x64.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x64.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x86.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x86.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|Any CPU.Build.0 = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|ARM.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|ARM.Build.0 = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhone.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhone.Build.0 = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x64.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x64.Build.0 = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x86.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x86.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|ARM.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|ARM.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhone.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x64.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x64.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x86.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x86.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|Any CPU.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|ARM.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|ARM.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhone.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhone.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x64.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x64.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x86.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x86.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|ARM.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|ARM.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhone.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x64.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x64.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x86.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x86.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|Any CPU.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|ARM.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|ARM.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhone.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhone.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x64.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x64.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x86.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x86.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|ARM.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|ARM.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhone.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x64.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x64.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x86.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x86.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|Any CPU.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|ARM.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|ARM.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhone.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhone.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x64.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x64.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x86.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1314,6 +1419,9 @@ Global {01B928BA-5E3B-46C6-B172-624A60ECC534} = {B48F3C95-B33F-4EF5-B223-06356D749A80} {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B} = {B48F3C95-B33F-4EF5-B223-06356D749A80} {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5} = {F7C14B24-556B-413B-B418-4CD194766A26} + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {4BF56189-8DC5-41A9-9440-3C7B9F57E151} diff --git a/samples/ImageLoading.Forms.Sample/Wpf/App.config b/samples/ImageLoading.Forms.Sample/Wpf/App.config new file mode 100644 index 000000000..787dcbecc --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Wpf/App.xaml b/samples/ImageLoading.Forms.Sample/Wpf/App.xaml new file mode 100644 index 000000000..fd0965690 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/samples/ImageLoading.Forms.Sample/Wpf/App.xaml.cs b/samples/ImageLoading.Forms.Sample/Wpf/App.xaml.cs new file mode 100644 index 000000000..703fcfe00 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/App.xaml.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using System.Windows; + +namespace Wpf +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + protected override void OnStartup(StartupEventArgs e) + { + base.OnStartup(e); + FFImageLoading.Forms.Platform.CachedImageRenderer.Init(); + + var config = new FFImageLoading.Config.Configuration() + { + VerboseLogging = true, + VerbosePerformanceLogging = true, + VerboseMemoryCacheLogging = true, + VerboseLoadingCancelledLogging = true, + }; + FFImageLoading.ImageService.Instance.Initialize(config); + List assembliesToInclude = new List(); + assembliesToInclude.Add(typeof(FFImageLoading.Forms.Platform.CachedImageRenderer).GetTypeInfo().Assembly); + Xamarin.Forms.Forms.Init(assembliesToInclude); + } + } +} diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Assets/error.png b/samples/ImageLoading.Forms.Sample/Wpf/Assets/error.png new file mode 100644 index 0000000000000000000000000000000000000000..b791d43921a0fb21bf202d39dd36bf770868c7b8 GIT binary patch literal 2590 zcmbW2`8O1b8^+yRU1P6=u4=e4NkoYj)1WBHlB{DH8fy(%vlUq~RH!TaUJSVmCRuW2 zgzQ<088LTEWy_2u%UB!lb^nC#_jAsB-gBOF-sh+HInN_g6MYduX+b_dJ`sZ}dS-ll zzbOAVh#lLCNx^;n?e+VeOV~T+-fnk-@P4j*7hJrZTxAVzX$^w}T4CDJKGQ$AJfh)-N1;lY#ISWrqs)eaylq98N zh%mH^Y3{Qy_mC5k8&Ti9SQe^(0k^uvb*{)TP|FamYhb2oAuFc5NxFMS<&!e{NU6KF z-{5~ILfdA`S0(L!z)IgKja9m=9l@elBvftne1-#JrVKYUw-7bGGls1tdPZ_=f!4a^ zU8L63_c{`Xq&=BZlMpEV8g=^wmQdASyzW`}dDX)^!Q0(%b$ND!-+34Bt3uYd(V8LT z#GoYWW?-Fog-q^EucP7Ed1E}ruX#lHcH)n=>g97)Oh*L`{yx#2BLP~+vyoPv+>eER zvE1H$Ru$rOr{JWN)7P-t#9Bs(^x2g`V_eIVJ&px3A}@oq9bNImfjAPyvtIw)^2`e= zbHr$nGE+|^2yt4p^NH1JQ)oYq3AV*U_j*fZpQRl(5X?xFnXk!H@5W*j41520 z3go6M_~E{MqHAN|)A}=>gf-l@%Tfx$!<`$}-)4;>=f7^)&*J7TL`c(LQE{>N{wdAv z$&%5}%F^$<*RJ3kNvX;4w{4&_Ox)Tp^Op{`eXRQeCnOvj>)*T5UiV_f~D z5=pa_v*zMRV~6ir3xCR|4Noy4Oy4?rOHx5LwW}D(O;t zR99PnZ%?Kah0S_-#s!)?4LlDd{b{^YCP$8}K*ik$Q}yg(J?!*RJc`HYQw+}(E@iSz zM*Xk-igAtgzM5W#s$ntAn>U6VyL}hL-dG;T7pktw?8M_;HFIXuvPA;qk}gd|^#+uP zCHzTIKDjo}D1Amz_WdK&L$rINeldB|QqNBplN`S=rikaBWq7-lpvaqBPY$b-mwH#w zCaWrLeUENPkPMeM#XjI0B$GPN(Du?JU`0@b!@nJMOM9)JCg;wrGWx;P&-!6Bdm90` zqODF2M>AA6^N0sB^?m$U(2o$}vW%jp{P4}JljIl^XtkwNzB#{&$V@&*R&_cUhVd5W zYmz(#RYyD0)8CYk922E`--%p7QdzIouIOU9ThIwtE zpshwe^%*TEac!_J{t{L!2Pdk|b*w`c$608Rg9z9^s0mg-#S4@@y4FJia6y-6^VgRU zsLT!SF`-h9aTVqCKvzPMj2y~3`{`4;XvxN zVlh?$L~fsF6)nfkt7s|Q6r0oIep6BThq~~_;MgIZ*x2gz!Pm;XPr(OzAG%N2`C}Iz zku6_PYBuJ|{)%Cxw`@$CmBI)@pp?^!y?mx@pieqifBMUrx#eWcu`^^R6$#RlFSE?q z9rJ{$jrJ}|U~Lda2-nh;8Tw(Es!c*4UYLFn{+&|EYkJ+gR!*xtCPio8jh^nsE2Gt! zYDb0c3{72ZCY-yqO175lLOX9XHD%A;$k#`&h+Pf;;O0&kaY50xY&$7(#w5eE`&PM& zZP{AnPXvc@#}!p-m0!O6`3m&sbG$n*EfQ6ht!{>KSFI1xwL2GdtPZ4}y4rE4yE7u_ zlIche$7X4cbHS^gj2(o7#RBf^YdA_rCv7Gnk&RG7)r;1*?XzkM z`&_#-t$!wt{epTKD|pYTlvwrJ;eoerdy!!b#U+GIit}ZiKaeuiCRL~UZ26JO%FWSY^n6dJ5mM!zn7SP63$JQ7GIeScS!{&u1`lkX*p9UL(`4Uu z`t_lUH*Qb5sEmi`$WOd6BJY@PIo6R@UqevZV|B9jx%mlY?3;>%4eCS`zu;)?wIrGG zwk)Zf^7E`oD;?=mMHI3D)43qtGPdnf&S71wO^9m1OCx+j2Z8sJ-^z#2jp32zu8`N` zz#gCumO3))lQc)pAzjFAkuj0%jx0q*j?wX$MpA_-c^Nbkch#*no6p<#| zEr`2UL|I%!^JjVSIN#ryMy|xq=+Z@)Ci8&-(J05wJ+;Q4A1{+VS5vS)Qw-|am5EuV!IN_XF7HcoKLGM(7o4x&o& zMdOH?dV3boACkf|% zsam?%^z@linsdr}iJL3wQ|I)w>U8q|S<@$A&kerd@E?&b#}5enSMvs!O!Uex-iZ1a D#?MkE literal 0 HcmV?d00001 diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Assets/loading.png b/samples/ImageLoading.Forms.Sample/Wpf/Assets/loading.png new file mode 100644 index 0000000000000000000000000000000000000000..3f9cde526f878c24ad42f298f65ce78390865707 GIT binary patch literal 3820 zcmc(iS635Sw}wG+Bi%-nCL)4`02=|7u1K#+2_e)_rAwENpdx~yNhnHh5)w*CK)L|} z1dIr1=)EQM9!em`ea`m$gzvjpV?ASzHQ$T5Zk`$Y#6XjSm6w%)fq_F?OU;OZff4x6 zIeYqd#h@Tu^Y_K$rw;Zr_HyzIg!(u#JaX`|bG)YQ0d;mXa)derc@rEJe|JPa(KAu+ z{=TrWxvyjPxg0a}#IkIBYW+o2bJ&}&<_;C6P*fvsvb}3|fxO-Ki(=(cMWda-;9d1C z6O^T0U9-XFBbx_2p^ zIQ(>0;SYG$H{y@Q!^7j5xlM>uW&Y>>%9`P|4eHkR!P3g^&hBAidbfXgBgn4Y&I98W zR1bBpE=K;u)QwKfY#3UW%`R+xF8@W{KSH7h(O*V&a8CW3nAqYbYL`V0Wi7gUjhk9y_G_pa)CU-0?@1C5{pIVni$F&_F zpFFiHGl8N&P}Cx2dw{g04Jt{?CVu$TlbBA3OX)PVLq*588{42x==9zJvYCBFLK-0^ z0U!UN>*VC*kwIZ$+0Rwe6w%)wc}iRDk;#jZmC+-Mfi7O==fI+Kl9ud6KIXY>@6=h@ zP!j%6L5z$nL)C;E;uwFnJG^E;#vKDUefDfrw4_t??$#lVva5Ty!y*beGUieU-xShn zwBC00ojPU9$Ois;3Q+lw0r)STjXd)&GFJYJ*BAi*BGW%_|Ea!Y_}{kQc#h%!5+cw1 zSHehiIe0lwvCFf=7RuUg({b-0?QpqjM?+1X*sK%(&F2pG)9_8i`4{A6oznBg)P_my z1;Nxzm$T)$p5V##K|aBB(q!iHgXQf^@}8@M#T`-OQp=7TOKXEriiR*|BgLefU=wmx zuh-p!sHXxxs?nNZWbPFi;Y*s>4lS7O8ZY zG&z(X*9~nG!eWl8Ffsql=`Gm+lY9W^4`^=Si}22I$++W(F{O!ic)fc?QN9Qc@iI|+n_r)Tq*~& ztdGAgsfiB^6nYeXnP1Q*)Y0Zs33a2>$hs+|z?KO72nD|hCzQmOhGHiak@cD2jfRGd zS7bSY%CKf*I!e9M=!2)+DS!=D4V)Q7sC|21y*dcIX<0!h>Wi>NO-#L2#mm9^?|UTK}@Uz3mHm05HQcfgK)vK0BW` z0tEK2BDL&4t~VS7e4X30J4+Z1L35GsQK<8guc03u2Fw9); zZZNfr%dGxX_M|z~MZjxC(Xm>~!Bk}K%jiO;cKyf55$?6M^)BVtH4Z*Ell10CH9HPh zRXzEp!QCh@185~XYziN$s9|!UOkDot*byrShPn3N^LsWP16amP5|1Rn zu!LZPo9BGwf`<0u7;^(Dgr|%`*69?s)s_uzuF>chjKU+}d}X18ise4+K=(w*Y|QYn zsO|6obD-Uc9A0xVqKuyBHE>~-`~Lhb@EmIQK&?AIvS=)UrD~3rrmj}(OC<#vX5xXkdDI^hRoxOvMpaQUV^uN_q;9~nk%)Z4=n zGf9OnWtz^-7YADFAZU(ZLHNFBsWIkM{$2~p!crm+qpnIZVN{f*HFzEYkpS+6O8Tv_ zh`wnF-IBc2!=GC#ksc4N_BB%gH8!rtDj7=~T({Nc&UD*lvQx?*lo|O9@kCz52`k2( ziTfML4R1DNtppn@yVh>-uAT=NDBH92J`!gIG!XexuOVLwH@ntVvSNxXZ!X5+`x)l% z;~2R~@`_Nds-1M@!HYRM3X={owgi zrE>3`%rT$P8Yem_n5ULv-~4-CVRLU5PQYUB7s$T9e4rfqFCd%&d;xQ_&M}p> zw_?sY5M`|WeZLB>`;0whbf^BqZn`Ags(K|`YqPhix7;b#rj0+0W72|d{bDON=QQ;3 z70rO@gkJ(xPLw^`jB58z2*)Z<^EM70!xyIlx(eE<;ntjA1!a}#V7%ZWWS zRyi!>49NCZ1~<4zfj(d=0q;eNoJJ6uY>$02G}2}I#=3a&v?&7RVjS%V^u3VPmQbTR z#BGZk-#K)9cK-SXugbc>28zBhfJ86Ly)VOXJ!uxslXc62!DfuEz)kW`6HaF2?~g&- zj^N1=UPJ82!4SW4YUvaM95wI~<7VE8#h7!p*;zT;D+w`)JsOQ9S>jzU+&%z>b8c2VA&-Q-r znpp5F3Blux4a`Q(d)b3di2-N6Xx?~ikNjZ5c~^LW>unmc4N2dU)D6gta%@?pDv5L+ zS`Kvo`syDJdLsxr5c1gUcVYsTj$Lm@Yp#1_6Vr%zyOj2ub-m@!_vn68wLQIy`zwZb z*3Q@wlxVHcDL@H`}VCtk`$DnR(S2x_B)|#2Qhl3oBVt<@_XPOZv(s~%( z6w|$syc`~*@i7)(9LrsF-?5kfr<;Jge_(Nvr>pv5$Ao9o8Sz`W$#d40M-6 z3s!E08Kw3V-4)6b_Hh1yqqfv7#U7c4v-=+2*=r1u+dm=cuixv6Oge8dZ9`Zp~iCg%Mr56)k}Evt{=_aE$zI;m>hNvX_!Ao6oYi3(9dZcSVO+!cfeIQgk7s6lvD=bpP%7TY>$GM@2g2zXH6vO0g9Pm>VXRq`9qRI z-c9&&bW_h8t(2y#5|nJS_Bk<1LOBUw342NfKqksFq9V#ZlBiCzs^Pa~PLTVbEcWC0 zgNc+e@6@09w8jJWh$o)uuT?`M)DJJK&t|^QX$iQ@aq5q-GyT!}vw!6O+#jnK`s4np uf298P|EoXap9SGR9faI|M`!t);hXTz(?qt2iQnrhgSNVXTDhui)c*h@t(V#W literal 0 HcmV?d00001 diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Assets/sample.svg b/samples/ImageLoading.Forms.Sample/Wpf/Assets/sample.svg new file mode 100644 index 000000000..4ab9b8eea --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Assets/sample.svg @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + all logos are copyright of their respective owners + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj b/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj new file mode 100644 index 000000000..37be0743b --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj @@ -0,0 +1,137 @@ + + + + + Debug + AnyCPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F} + WinExe + Wpf + Wpf + v4.7.1 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + 4.0 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + MainWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + 3.6.0.22065 + + + 3.6.0.22065 + + + + + {51ca3be2-df00-4f49-8054-e5c776992b61} + FFImageLoading + + + {0aa5a427-adc8-4685-aa8c-fea26ebd31f5} + FFImageLoading.Forms.Wpf + + + {3d6c1f12-68d7-44c2-a7de-8e7942627a01} + FFImageLoading.Forms + + + {a63b1175-5fb5-4a9c-bcc5-8ac091876d04} + FFImageLoading.Transformations.Wpf + + + {dc06c582-6c7e-4018-a752-feb528c65f7e} + FFImageLoading.Wpf + + + {3a682234-5918-4f58-b02b-598a59c6a7bd} + FFImageLoading.Forms.Sample + + + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml b/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml new file mode 100644 index 000000000..aa0b1c3c2 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml @@ -0,0 +1,14 @@ + + + + + + diff --git a/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml.cs b/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml.cs new file mode 100644 index 000000000..aa9dbb184 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/MainWindow.xaml.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using Xamarin.Forms.Platform.WPF; + +namespace Wpf +{ + /// + /// Interaction logic for MainWindow.xaml + /// + public partial class MainWindow : FormsApplicationPage + { + public MainWindow() + { + MinWidth = 1000; + MinHeight = 450; + InitializeComponent(); + LoadApplication(new FFImageLoading.Forms.Sample.App()); + } + } +} diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Properties/AssemblyInfo.cs b/samples/ImageLoading.Forms.Sample/Wpf/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..56a1c5331 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Wpf")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Wpf")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.Designer.cs b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.Designer.cs new file mode 100644 index 000000000..66bdd5844 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Wpf.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Wpf.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.resx b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.resx new file mode 100644 index 000000000..af7dbebba --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.Designer.cs b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.Designer.cs new file mode 100644 index 000000000..12a08fa37 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Wpf.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.settings b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.settings new file mode 100644 index 000000000..033d7a5e9 --- /dev/null +++ b/samples/ImageLoading.Forms.Sample/Wpf/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Wpf/CachedImageRenderer.cs b/source/FFImageLoading.Forms.Wpf/CachedImageRenderer.cs new file mode 100644 index 000000000..a4c1384d3 --- /dev/null +++ b/source/FFImageLoading.Forms.Wpf/CachedImageRenderer.cs @@ -0,0 +1,350 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Forms.Args; +using FFImageLoading.Helpers; +using FFImageLoading.Work; +using System; +using System.ComponentModel; +using System.IO; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using Xamarin.Forms; +using Xamarin.Forms.Platform.WPF; +using Image = System.Windows.Controls.Image; +using Size = Xamarin.Forms.Size; + +namespace FFImageLoading.Forms.Platform +{ + /// + /// CachedImage Implementation + /// + //[Preserve(AllMembers = true)] + public class CachedImageRenderer : ViewRenderer + { + [RenderWith(typeof(CachedImageRenderer))] + internal class _CachedImageRenderer + { + } + + bool _isSizeSet; + private bool _measured; + private IScheduledWork _currentTask; + private ImageSourceBinding _lastImageSource; + private bool _isDisposed = false; + + /// + /// Used for registration with dependency service + /// + public static void Init() + { + CachedImage.IsRendererInitialized = true; +#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed + ScaleHelper.InitAsync(); +#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed + } + + public override SizeRequest GetDesiredSize(double widthConstraint, double heightConstraint) + { + var bitmapSource = Control.Source as BitmapSource; + + if (bitmapSource == null) + return new SizeRequest(); + + _measured = true; + + return new SizeRequest(new Size() + { + Width = bitmapSource.PixelWidth, + Height = bitmapSource.PixelHeight + }); + } + + protected override void OnElementChanged(ElementChangedEventArgs e) + { + base.OnElementChanged(e); + + if (Control == null && Element != null && !_isDisposed) + { + var control = new Image() + { + Stretch = GetStretch(Aspect.AspectFill), + }; + control.Loaded += OnImageOpened; + SetNativeControl(control); + + Control.HorizontalAlignment = HorizontalAlignment.Center; + Control.VerticalAlignment = VerticalAlignment.Center; + } + + if (e.OldElement != null) + { + e.OldElement.InternalReloadImage = null; + e.OldElement.InternalCancel = null; + e.OldElement.InternalGetImageAsJPG = null; + e.OldElement.InternalGetImageAsPNG = null; + } + + if (e.NewElement != null) + { + _isSizeSet = false; + e.NewElement.InternalReloadImage = new Action(ReloadImage); + e.NewElement.InternalCancel = new Action(CancelIfNeeded); + e.NewElement.InternalGetImageAsJPG = new Func>(GetImageAsJpgAsync); + e.NewElement.InternalGetImageAsPNG = new Func>(GetImageAsPngAsync); + + UpdateAspect(); + UpdateImage(Control, Element, e.OldElement); + } + } + + protected override void Dispose(bool disposing) + { + if (!_isDisposed) + { + _isDisposed = true; + if (Control != null) + { + Control.Loaded -= OnImageOpened; + } + CancelIfNeeded(); + } + + base.Dispose(disposing); + } + + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged(sender, e); + + if (e.PropertyName == CachedImage.SourceProperty.PropertyName) + { + UpdateImage(Control, Element, null); + } + else if (e.PropertyName == CachedImage.AspectProperty.PropertyName) + { + UpdateAspect(); + } + } + + void OnImageOpened(object sender, RoutedEventArgs routedEventArgs) + { + if (_measured) + { + ((IVisualElementController)Element)?.InvalidateMeasure(Xamarin.Forms.Internals.InvalidationTrigger.RendererReady); + } + } + + async void UpdateImage(Image imageView, CachedImage image, CachedImage previousImage) + { + CancelIfNeeded(); + + if (image == null || imageView == null || _isDisposed) + return; + + var ffSource = await ImageSourceBinding.GetImageSourceBinding(image.Source, image).ConfigureAwait(false); + if (ffSource == null) + { + if (_lastImageSource == null) + return; + + _lastImageSource = null; + imageView.Source = null; + return; + } + + if (previousImage != null && !ffSource.Equals(_lastImageSource)) + { + _lastImageSource = null; + imageView.Source = null; + } + + image.SetIsLoading(true); + + var placeholderSource = await ImageSourceBinding.GetImageSourceBinding(image.LoadingPlaceholder, image).ConfigureAwait(false); + var errorPlaceholderSource = await ImageSourceBinding.GetImageSourceBinding(image.ErrorPlaceholder, image).ConfigureAwait(false); + TaskParameter imageLoader; + image.SetupOnBeforeImageLoading(out imageLoader, ffSource, placeholderSource, errorPlaceholderSource); + + if (imageLoader != null) + { + var finishAction = imageLoader.OnFinish; + var sucessAction = imageLoader.OnSuccess; + + imageLoader.Finish((work) => + { + finishAction?.Invoke(work); + ImageLoadingSizeChanged(image, false); + }); + + imageLoader.Success((imageInformation, loadingResult) => + { + sucessAction?.Invoke(imageInformation, loadingResult); + _lastImageSource = ffSource; + }); + + imageLoader.LoadingPlaceholderSet(() => ImageLoadingSizeChanged(image, true)); + + if (!_isDisposed) + _currentTask = imageLoader.Into(imageView); + } + } + + void UpdateAspect() + { + if (Control == null || Element == null || _isDisposed) + return; + Control.Stretch = GetStretch(Element.Aspect); + } + + static Stretch GetStretch(Aspect aspect) + { + switch (aspect) + { + case Aspect.AspectFill: + return Stretch.UniformToFill; + case Aspect.Fill: + return Stretch.Fill; + default: + return Stretch.Uniform; + } + } + + async void ImageLoadingSizeChanged(CachedImage element, bool isLoading) + { + await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(() => + { + if (element != null && !_isDisposed) + { + if (!isLoading || !_isSizeSet) + { + ((IVisualElementController)element)?.InvalidateMeasure(Xamarin.Forms.Internals.InvalidationTrigger.RendererReady); + _isSizeSet = true; + } + + if (!isLoading) + element.SetIsLoading(isLoading); + } + }); + } + + void ReloadImage() + { + UpdateImage(Control, Element, null); + } + + void CancelIfNeeded() + { + try + { + _currentTask?.Cancel(); + } + catch (Exception) { } + } + + Task GetImageAsJpgAsync(GetImageAsJpgArgs args) + { + return GetImageAsByteAsync(new JpegBitmapEncoder(), args.Quality, args.DesiredWidth, args.DesiredHeight); + } + + Task GetImageAsPngAsync(GetImageAsPngArgs args) + { + return GetImageAsByteAsync(new PngBitmapEncoder(), 90, args.DesiredWidth, args.DesiredHeight); + } + + async Task GetImageAsByteAsync(BitmapEncoder encoder, int quality, int desiredWidth, int desiredHeight) + { + if (Control?.Source == null) + return null; + + var bitmap = Control.Source as WriteableBitmap; + + if (bitmap == null) + return null; + + //byte[] pixels = null; + //uint pixelsWidth = (uint)bitmap.PixelWidth; + //uint pixelsHeight = (uint)bitmap.PixelHeight; + + WriteableBitmap source; + if (desiredWidth != 0 || desiredHeight != 0) + { + double widthRatio = (double)desiredWidth / (double)bitmap.PixelWidth; + double heightRatio = (double)desiredHeight / (double)bitmap.PixelHeight; + + double scaleRatio = Math.Min(widthRatio, heightRatio); + + if (desiredWidth == 0) + scaleRatio = heightRatio; + + if (desiredHeight == 0) + scaleRatio = widthRatio; + + var tr = new TransformedBitmap(bitmap, new ScaleTransform(scaleRatio, scaleRatio)); + + var bmp = new MemoryStream(); + BitmapEncoder enc = new BmpBitmapEncoder(); + enc.Frames.Add(BitmapFrame.Create(tr)); + enc.Save(bmp); + bmp.Seek(0, SeekOrigin.Begin); + //pixels = new byte[bmp.Length]; + source = await bmp.ToWriteableBitmap(); + //await bmp.ReadAsync(pixels, 0, (int)bmp.Length); + } + else + { + //pixels = await GetBytesFromBitmapAsync(bitmap); + source = bitmap; + } + + using (var stream = new MemoryStream()) + { + if (encoder is JpegBitmapEncoder enc) + { + //var propertySet = new BitmapPropertySet(); + //var qualityValue = new BitmapTypedValue((double)quality / 100d, Windows.Foundation.PropertyType.Single); + //propertySet.Add("ImageQuality", qualityValue); + + //encoder = await BitmapEncoder.CreateAsync(format, stream, propertySet); + enc.QualityLevel = quality; + } + //else + //{ + // encoder = await BitmapEncoder.CreateAsync(format, stream); + //} + + encoder.Frames.Add(BitmapFrame.Create(source)); + encoder.Save(stream); + //encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, + // pixelsWidth, pixelsHeight, 96, 96, pixels); + //await encoder.FlushAsync(); + stream.Seek(0,SeekOrigin.Begin); + + var bytes = new byte[stream.Length]; + await stream.ReadAsync(bytes, 0,bytes.Length); + + return bytes; + } + } + + async Task GetBytesFromBitmapAsync(WriteableBitmap bitmap) + { + var width = bitmap.PixelWidth; + var height = bitmap.PixelHeight; + var stride = width * ((bitmap.Format.BitsPerPixel + 7) / 8); + + var bitmapData = new byte[height * stride]; + + bitmap.CopyPixels(bitmapData, stride, 0); + return bitmapData; + //byte[] tempPixels; + //using (var sourceStream = bitmap.PixelBuffer.AsStream()) + //{ + // tempPixels = new byte[sourceStream.Length]; + // await sourceStream.ReadAsync(tempPixels, 0, tempPixels.Length).ConfigureAwait(false); + //} + + //return tempPixels; + } + } +} diff --git a/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj b/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj new file mode 100644 index 000000000..8a03b2a45 --- /dev/null +++ b/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj @@ -0,0 +1,74 @@ + + + + + Debug + AnyCPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5} + Library + Properties + FFImageLoading.Forms.Platform + FFImageLoading.Forms.Platform + v4.7.1 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + {0ad3a755-399a-4527-a001-6192724c67bb} + FFImageLoading + + + {0e77b5d3-dba5-46d3-af16-7c209c952bd0} + FFImageLoading.Forms + + + {dc06c582-6c7e-4018-a752-feb528c65f7e} + FFImageLoading.Wpf + + + + + 3.6.0.22065 + + + 3.6.0.22065 + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Wpf/ImageSourceBinding.cs b/source/FFImageLoading.Forms.Wpf/ImageSourceBinding.cs new file mode 100644 index 000000000..1474281e4 --- /dev/null +++ b/source/FFImageLoading.Forms.Wpf/ImageSourceBinding.cs @@ -0,0 +1,150 @@ +using System; +using Xamarin.Forms; +using System.Threading.Tasks; +using System.IO; +using System.Threading; + +namespace FFImageLoading.Forms.Platform +{ + public class ImageSourceBinding : IImageSourceBinding + { + public ImageSourceBinding(FFImageLoading.Work.ImageSource imageSource, string path) + { + ImageSource = imageSource; + Path = path; + } + + public ImageSourceBinding(Func> stream) + { + ImageSource = FFImageLoading.Work.ImageSource.Stream; + Stream = stream; + } + + public FFImageLoading.Work.ImageSource ImageSource { get; private set; } + + public string Path { get; private set; } + + public Func> Stream { get; private set; } + + internal static async Task GetImageSourceBinding(ImageSource source, CachedImage element) + { + if (source == null) + { + return null; + } + + var uriImageSource = source as UriImageSource; + if (uriImageSource != null) + { + var uri = uriImageSource.Uri?.OriginalString; + if (string.IsNullOrWhiteSpace(uri)) + return null; + + return new ImageSourceBinding(Work.ImageSource.Url, uri); + } + + var fileImageSource = source as FileImageSource; + if (fileImageSource != null) + { + if (string.IsNullOrWhiteSpace(fileImageSource.File)) + return null; + + if (!string.IsNullOrWhiteSpace(System.IO.Path.GetDirectoryName(fileImageSource.File)) && File.Exists(fileImageSource.File)) + return new ImageSourceBinding(FFImageLoading.Work.ImageSource.Filepath, fileImageSource.File); + + return new ImageSourceBinding(FFImageLoading.Work.ImageSource.ApplicationBundle, fileImageSource.File); + } + + var streamImageSource = source as StreamImageSource; + if (streamImageSource != null) + { + return new ImageSourceBinding(streamImageSource.Stream); + } + + var embeddedResoureSource = source as EmbeddedResourceImageSource; + if (embeddedResoureSource != null) + { + var uri = embeddedResoureSource.Uri?.OriginalString; + if (string.IsNullOrWhiteSpace(uri)) + return null; + + return new ImageSourceBinding(FFImageLoading.Work.ImageSource.EmbeddedResource, uri); + } + + var dataUrlSource = source as DataUrlImageSource; + if (dataUrlSource != null) + { + if (string.IsNullOrWhiteSpace(dataUrlSource.DataUrl)) + return null; + + return new ImageSourceBinding(FFImageLoading.Work.ImageSource.Url, dataUrlSource.DataUrl); + } + + var vectorSource = source as IVectorImageSource; + if (vectorSource != null) + { + if (vectorSource.VectorHeight == 0 && vectorSource.VectorHeight == 0) + { + if (element.Height > 0d && !double.IsInfinity(element.Height)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorHeight = (int)element.Height; + } + else if (element.Width > 0d && !double.IsInfinity(element.Width)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorWidth = (int)element.Width; + } + else if (element.HeightRequest > 0d && !double.IsInfinity(element.HeightRequest)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorHeight = (int)element.HeightRequest; + } + else if (element.WidthRequest > 0d && !double.IsInfinity(element.WidthRequest)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorWidth = (int)element.WidthRequest; + } + else if (element.MinimumHeightRequest > 0d && !double.IsInfinity(element.MinimumHeightRequest)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorHeight = (int)element.MinimumHeightRequest; + } + else if (element.MinimumWidthRequest > 0d && !double.IsInfinity(element.MinimumWidthRequest)) + { + vectorSource.UseDipUnits = true; + vectorSource.VectorWidth = (int)element.MinimumWidthRequest; + } + } + + return await GetImageSourceBinding(vectorSource.ImageSource, element).ConfigureAwait(false); + } + + throw new NotImplementedException("ImageSource type not supported"); + } + + public override bool Equals(object obj) + { + var item = obj as ImageSourceBinding; + + if (item == null) + { + return false; + } + + return this.ImageSource == item.ImageSource && this.Path == item.Path && this.Stream == item.Stream; + } + + public override int GetHashCode() + { + unchecked + { + int hash = 17; + hash = hash * 23 + this.ImageSource.GetHashCode(); + hash = hash * 23 + Path.GetHashCode(); + hash = hash * 23 + Stream.GetHashCode(); + return hash; + } + } + } +} \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Wpf/Properties/AssemblyInfo.cs b/source/FFImageLoading.Forms.Wpf/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..daf5ac6f9 --- /dev/null +++ b/source/FFImageLoading.Forms.Wpf/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FFImageLoading.Forms.Wpf")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FFImageLoading.Forms.Wpf")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("0aa5a427-adc8-4685-aa8c-fea26ebd31f5")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/FFImageLoading.Transformations.Wpf/BlurredTransformation.cs b/source/FFImageLoading.Transformations.Wpf/BlurredTransformation.cs new file mode 100644 index 000000000..f957186e3 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/BlurredTransformation.cs @@ -0,0 +1,126 @@ +using System; +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class BlurredTransformation : TransformationBase + { + public BlurredTransformation() + { + Radius = 20d; + } + + public BlurredTransformation(double radius) + { + Radius = radius; + } + + public double Radius { get; set; } + + public override string Key + { + get { return string.Format("BlurredTransformation,radius={0}", Radius); } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, ImageSource source, bool isPlaceholder, string key) + { + + ToLegacyBlurred(bitmapSource, (int)Radius); + + return bitmapSource; + } + + // Source: http://incubator.quasimondo.com/processing/superfast_blur.php + public static void ToLegacyBlurred(BitmapHolder source, int radius) + { + int w = source.Width; + int h = source.Height; + int wm = w - 1; + int hm = h - 1; + int wh = w * h; + int div = radius + radius + 1; + int[] r = new int[wh]; + int[] g = new int[wh]; + int[] b = new int[wh]; + int rsum, gsum, bsum, x, y, i, yp, yi, yw; + int[] vmin = new int[Math.Max(w, h)]; + int[] vmax = new int[Math.Max(w, h)]; + + int[] dv = new int[256 * div]; + for (i = 0; i < 256 * div; i++) + { + dv[i] = (i / div); + } + + yw = yi = 0; + + for (y = 0; y < h; y++) + { + rsum = gsum = bsum = 0; + for (i = -radius; i <= radius; i++) + { + var p = source.GetPixel(yi + Math.Min(wm, Math.Max(i, 0))); + rsum += p.R; + gsum += p.G; + bsum += p.B; + } + for (x = 0; x < w; x++) + { + + r[yi] = dv[rsum]; + g[yi] = dv[gsum]; + b[yi] = dv[bsum]; + + if (y == 0) + { + vmin[x] = Math.Min(x + radius + 1, wm); + vmax[x] = Math.Max(x - radius, 0); + } + var p1 = source.GetPixel(yw + vmin[x]); + var p2 = source.GetPixel(yw + vmax[x]); + + rsum += p1.R - p2.R; + gsum += p1.G - p2.G; + bsum += p1.B - p2.B; + yi++; + } + yw += w; + } + + for (x = 0; x < w; x++) + { + rsum = gsum = bsum = 0; + yp = -radius * w; + for (i = -radius; i <= radius; i++) + { + yi = Math.Max(0, yp) + x; + rsum += r[yi]; + gsum += g[yi]; + bsum += b[yi]; + yp += w; + } + yi = x; + for (y = 0; y < h; y++) + { + // Preserve alpha channel: ( 0xff000000 & pix[yi] ) + var oldColor = source.GetPixel(yi); + var newColor = new ColorHolder(oldColor.A, dv[rsum], dv[gsum], dv[bsum]); + source.SetPixel(yi, newColor); + if (x == 0) + { + vmin[y] = Math.Min(y + radius + 1, hm) * w; + vmax[y] = Math.Max(y - radius, 0) * w; + } + var p1 = x + vmin[y]; + var p2 = x + vmax[y]; + + rsum += r[p1] - r[p2]; + gsum += g[p1] - g[p2]; + bsum += b[p1] - b[p2]; + + yi += w; + } + } + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/CircleTransformation.cs b/source/FFImageLoading.Transformations.Wpf/CircleTransformation.cs new file mode 100644 index 000000000..e5e2a68e7 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/CircleTransformation.cs @@ -0,0 +1,31 @@ +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class CircleTransformation : TransformationBase + { + public CircleTransformation() : this(0d, null) + { + } + + public CircleTransformation(double borderSize, string borderHexColor) + { + BorderSize = borderSize; + BorderHexColor = borderHexColor; + } + + public double BorderSize { get; set; } + public string BorderHexColor { get; set; } + + + public override string Key + { + get { return string.Format("CircleTransformation,borderSize={0},borderHexColor={1}", BorderSize, BorderHexColor); } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return RoundedTransformation.ToRounded(bitmapSource, 0, 1f, 1f, BorderSize, BorderHexColor); + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/ColorFillTransformation.cs b/source/FFImageLoading.Transformations.Wpf/ColorFillTransformation.cs new file mode 100644 index 000000000..d82eb2295 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/ColorFillTransformation.cs @@ -0,0 +1,47 @@ +using System; +using FFImageLoading.Work; +using FFImageLoading.Extensions; + +namespace FFImageLoading.Transformations +{ + public class ColorFillTransformation : TransformationBase + { + public ColorFillTransformation() : this("#000000") + { + } + + public ColorFillTransformation(string hexColor) + { + HexColor = hexColor; + } + + public string HexColor { get; set; } + + public override string Key => string.Format("ColorFillTransformation,hexColor={0}", HexColor); + + public static ColorHolder BlendColor(ColorHolder color, ColorHolder backColor) + { + float amount = (float)color.A / 255; + + byte r = (byte)((color.R * amount) + backColor.R * (1 - amount)); + byte g = (byte)((color.G * amount) + backColor.G * (1 - amount)); + byte b = (byte)((color.B * amount) + backColor.B * (1 - amount)); + + return new ColorHolder(r, g, b); + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, ImageSource source, bool isPlaceholder, string key) + { + var len = bitmapSource.PixelCount; + var backColor = HexColor.ToColorFromHex(); + + for (var i = 0; i < len; i++) + { + var color = bitmapSource.GetPixel(i); + bitmapSource.SetPixel(i, BlendColor(color, backColor)); + } + + return bitmapSource; + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/ColorSpaceTransformation.cs b/source/FFImageLoading.Transformations.Wpf/ColorSpaceTransformation.cs new file mode 100644 index 000000000..772dd8c23 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/ColorSpaceTransformation.cs @@ -0,0 +1,103 @@ +using FFImageLoading.Work; +using System; +using System.Linq; + +namespace FFImageLoading.Transformations +{ + public class ColorSpaceTransformation : TransformationBase + { + float[][] _rgbawMatrix; + + public ColorSpaceTransformation() : this(FFColorMatrix.InvertColorMatrix) + { + } + + public ColorSpaceTransformation(float[][] rgbawMatrix) + { + if (rgbawMatrix.Length != 5 || rgbawMatrix.Any(v => v.Length != 5)) + throw new ArgumentException("Wrong size of RGBAW color matrix"); + + RGBAWMatrix = rgbawMatrix; + } + + public float[][] RGBAWMatrix + { + get + { + return _rgbawMatrix; + } + + set + { + if (value.Length != 5 || value.Any(v => v.Length != 5)) + throw new ArgumentException("Wrong size of RGBAW color matrix"); + + _rgbawMatrix = value; + } + } + + public override string Key + { + get + { + return string.Format("ColorSpaceTransformation,rgbawMatrix={0}", + string.Join(",", _rgbawMatrix.Select(x => string.Join(",", x)).ToArray())); + } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + ToColorSpace(bitmapSource, _rgbawMatrix); + + return bitmapSource; + } + + public static void ToColorSpace(BitmapHolder bmp, float[][] rgbawMatrix) + { + var r0 = rgbawMatrix[0][0]; + var r1 = rgbawMatrix[0][1]; + var r2 = rgbawMatrix[0][2]; + var r3 = rgbawMatrix[0][3]; + + var g0 = rgbawMatrix[1][0]; + var g1 = rgbawMatrix[1][1]; + var g2 = rgbawMatrix[1][2]; + var g3 = rgbawMatrix[1][3]; + + var b0 = rgbawMatrix[2][0]; + var b1 = rgbawMatrix[2][1]; + var b2 = rgbawMatrix[2][2]; + var b3 = rgbawMatrix[2][3]; + + var a0 = rgbawMatrix[3][0]; + var a1 = rgbawMatrix[3][1]; + var a2 = rgbawMatrix[3][2]; + var a3 = rgbawMatrix[3][3]; + + var rOffset = rgbawMatrix[4][0]; + var gOffset = rgbawMatrix[4][1]; + var bOffset = rgbawMatrix[4][2]; + var aOffset = rgbawMatrix[4][3]; + + var nWidth = bmp.Width; + var nHeight = bmp.Height; + var len = bmp.PixelCount; + + for (var i = 0; i < len; i++) + { + var color = bmp.GetPixel(i); + var a = color.A; + var r = color.R; + var g = color.G; + var b = color.B; + + var rNew = (int)(r * r0 + g * g0 + b * b0 + a * a0 + rOffset); + var gNew = (int)(r * r1 + g * g1 + b * b1 + a * a1 + gOffset); + var bNew = (int)(r * r2 + g * g2 + b * b2 + a * a2 + bOffset); + var aNew = (int)(r * r3 + g * g3 + b * b3 + a * a3 + aOffset); + + bmp.SetPixel(i, new ColorHolder(aNew, rNew, gNew, bNew)); + } + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/CornerTransformType.cs b/source/FFImageLoading.Transformations.Wpf/CornerTransformType.cs new file mode 100644 index 000000000..8abfcdaa4 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/CornerTransformType.cs @@ -0,0 +1,31 @@ +using System; + +namespace FFImageLoading.Transformations +{ + [Flags] + public enum CornerTransformType + { + TopLeftCut = 0x1, + TopRightCut = 0x2, + BottomLeftCut = 0x4, + BottomRightCut = 0x8, + + TopLeftRounded = 0x10, + TopRightRounded = 0x20, + BottomLeftRounded = 0x40, + BottomRightRounded = 0x80, + + AllCut = TopLeftCut | TopRightCut | BottomLeftCut | BottomRightCut, + LeftCut = TopLeftCut | BottomLeftCut, + RightCut = TopRightCut | BottomRightCut, + TopCut = TopLeftCut | TopRightCut, + BottomCut = BottomLeftCut | BottomRightCut, + + AllRounded = TopLeftRounded | TopRightRounded | BottomLeftRounded | BottomRightRounded, + LeftRounded = TopLeftRounded | BottomLeftRounded, + RightRounded = TopRightRounded | BottomRightRounded, + TopRounded = TopLeftRounded | TopRightRounded, + BottomRounded = BottomLeftRounded | BottomRightRounded, + } +} + diff --git a/source/FFImageLoading.Transformations.Wpf/CornersTransformation.cs b/source/FFImageLoading.Transformations.Wpf/CornersTransformation.cs new file mode 100644 index 000000000..21adcb2f3 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/CornersTransformation.cs @@ -0,0 +1,251 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class CornersTransformation : TransformationBase + { + public CornersTransformation() : this(20d, CornerTransformType.TopRightRounded) + { + } + + public CornersTransformation(double cornersSize, CornerTransformType cornersTransformType) + : this(cornersSize, cornersSize, cornersSize, cornersSize, cornersTransformType, 1d, 1d) + { + } + + public CornersTransformation(double topLeftCornerSize, double topRightCornerSize, double bottomLeftCornerSize, double bottomRightCornerSize, + CornerTransformType cornersTransformType) + : this(topLeftCornerSize, topRightCornerSize, bottomLeftCornerSize, bottomRightCornerSize, cornersTransformType, 1d, 1d) + { + } + + public CornersTransformation(double cornersSize, CornerTransformType cornersTransformType, double cropWidthRatio, double cropHeightRatio) + : this(cornersSize, cornersSize, cornersSize, cornersSize, cornersTransformType, cropWidthRatio, cropHeightRatio) + { + } + + public CornersTransformation(double topLeftCornerSize, double topRightCornerSize, double bottomLeftCornerSize, double bottomRightCornerSize, + CornerTransformType cornersTransformType, double cropWidthRatio, double cropHeightRatio) + { + TopLeftCornerSize = topLeftCornerSize; + TopRightCornerSize = topRightCornerSize; + BottomLeftCornerSize = bottomLeftCornerSize; + BottomRightCornerSize = bottomRightCornerSize; + CornersTransformType = cornersTransformType; + CropWidthRatio = cropWidthRatio; + CropHeightRatio = cropHeightRatio; + } + + public double TopLeftCornerSize { get; set; } + public double TopRightCornerSize { get; set; } + public double BottomLeftCornerSize { get; set; } + public double BottomRightCornerSize { get; set; } + public double CropWidthRatio { get; set; } + public double CropHeightRatio { get; set; } + public CornerTransformType CornersTransformType { get; set; } + + public override string Key + { + get + { + return string.Format("CornersTransformation,cornersSizes={0},{1},{2},{3},cornersTransformType={4},cropWidthRatio={5},cropHeightRatio={6},", + TopLeftCornerSize, TopRightCornerSize, BottomRightCornerSize, BottomLeftCornerSize, CornersTransformType, CropWidthRatio, CropHeightRatio); + } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return ToTransformedCorners(bitmapSource, TopLeftCornerSize, TopRightCornerSize, BottomLeftCornerSize, BottomRightCornerSize, + CornersTransformType, CropWidthRatio, CropHeightRatio); + } + + public static BitmapHolder ToTransformedCorners(BitmapHolder source, double topLeftCornerSize, double topRightCornerSize, double bottomLeftCornerSize, double bottomRightCornerSize, + CornerTransformType cornersTransformType, double cropWidthRatio, double cropHeightRatio) + { + double sourceWidth = source.Width; + double sourceHeight = source.Height; + + double desiredWidth = sourceWidth; + double desiredHeight = sourceHeight; + + double desiredRatio = cropWidthRatio / cropHeightRatio; + double currentRatio = sourceWidth / sourceHeight; + + if (currentRatio > desiredRatio) + desiredWidth = (cropWidthRatio * sourceHeight / cropHeightRatio); + else if (currentRatio < desiredRatio) + desiredHeight = (cropHeightRatio * sourceWidth / cropWidthRatio); + + double cropX = ((sourceWidth - desiredWidth) / 2); + double cropY = ((sourceHeight - desiredHeight) / 2); + + BitmapHolder bitmap = null; + + if (cropX != 0 || cropY != 0) + { + bitmap = CropTransformation.ToCropped(source, (int)cropX, (int)cropY, (int)(desiredWidth), (int)(desiredHeight)); + } + else + { + bitmap = new BitmapHolder(source.PixelData, source.Width, source.Height); + } + + topLeftCornerSize = topLeftCornerSize * (desiredWidth + desiredHeight) / 2 / 100; + topRightCornerSize = topRightCornerSize * (desiredWidth + desiredHeight) / 2 / 100; + bottomLeftCornerSize = bottomLeftCornerSize * (desiredWidth + desiredHeight) / 2 / 100; + bottomRightCornerSize = bottomRightCornerSize * (desiredWidth + desiredHeight) / 2 / 100; + + int topLeftSize = (int)topLeftCornerSize; + int topRightSize = (int)topRightCornerSize; + int bottomLeftSize = (int)bottomLeftCornerSize; + int bottomRightSize = (int)bottomRightCornerSize; + + int w = bitmap.Width; + int h = bitmap.Height; + + var transparentColor = ColorHolder.Transparent; + + for (int y = 0; y < h; y++) + { + for (int x = 0; x < w; x++) + { + if (x <= topLeftSize && y <= topLeftSize) + { //top left corner + if (!CheckCorner(topLeftSize, topLeftSize, topLeftSize, cornersTransformType, Corner.TopLeftCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x >= w - topRightSize && y <= topRightSize && topRightSize > 0) + { // top right corner + if (!CheckCorner(w - topRightSize, topRightSize, topRightSize, cornersTransformType, Corner.TopRightCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x >= w - bottomRightSize && y >= h - bottomRightSize && bottomRightSize > 0) + { // bottom right corner + if (!CheckCorner(w - bottomRightSize, h - bottomRightSize, bottomRightSize, cornersTransformType, Corner.BottomRightCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x <= bottomLeftSize && y >= h - bottomLeftSize && bottomLeftSize > 0) + { // bottom left corner + if (!CheckCorner(bottomLeftSize, h - bottomLeftSize, bottomLeftSize, cornersTransformType, Corner.BottomLeftCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + } + } + + return bitmap; + } + + private enum Corner + { + TopLeftCorner, + TopRightCorner, + BottomRightCorner, + BottomLeftCorner, + } + + private static bool HasFlag(CornerTransformType flags, CornerTransformType flag) + { + return (flags & flag) != 0; + } + + private static bool CheckCorner(int w, int h, int size, CornerTransformType flags, Corner which, int xC, int yC) + { + if ((HasFlag(flags, CornerTransformType.TopLeftCut) && which == Corner.TopLeftCorner) + || (HasFlag(flags, CornerTransformType.TopRightCut) && which == Corner.TopRightCorner) + || (HasFlag(flags, CornerTransformType.BottomRightCut) && which == Corner.BottomRightCorner) + || (HasFlag(flags, CornerTransformType.BottomLeftCut) && which == Corner.BottomLeftCorner)) + return CheckCutCorner(w, h, size, which, xC, yC); + + if ((HasFlag(flags, CornerTransformType.TopLeftRounded) && which == Corner.TopLeftCorner) + || (HasFlag(flags, CornerTransformType.TopRightRounded) && which == Corner.TopRightCorner) + || (HasFlag(flags, CornerTransformType.BottomRightRounded) && which == Corner.BottomRightCorner) + || (HasFlag(flags, CornerTransformType.BottomLeftRounded) && which == Corner.BottomLeftCorner)) + return CheckRoundedCorner(w, h, size, which, xC, yC); + + return true; + } + + private static bool CheckCutCorner(int w, int h, int size, Corner which, int xC, int yC) + { + switch (which) + { + case Corner.TopLeftCorner: + { //Testing if its outside the top left corner + return Slope(size, 0, xC-1, yC) < Slope(size, 0, 0, size); + } + case Corner.TopRightCorner: + { //Testing if its outside the top right corner + return Slope(w, 0, xC, yC) > Slope(w, 0, w+size, size); + } + case Corner.BottomRightCorner: + { //Testing if its outside the bottom right corner + return Slope(h+size, h, xC, yC) > Slope(h+size, h, w, h+size); + } + case Corner.BottomLeftCorner: + { //Testing if its outside the bottom left corner + return Slope(0, h, xC, yC) < Slope(0, h, size, h+size); + } + } + + return true; + } + + private static double Slope(double x1, double y1, double x2, double y2) + { + return (y2 - y1) / (x2 - x1); + } + + private static bool CheckRoundedCorner(int h, int k, int r, Corner which, int xC, int yC) + { + int x = 0; + int y = r; + int p = (3 - (2 * r)); + + do + { + switch (which) + { + case Corner.TopLeftCorner: + { //Testing if its outside the top left corner + if (xC <= h - x && yC <= k - y) return false; + else if (xC <= h - y && yC <= k - x) return false; + break; + } + case Corner.TopRightCorner: + { //Testing if its outside the top right corner + if (xC >= h + y && yC <= k - x) return false; + else if (xC >= h + x && yC <= k - y) return false; + break; + } + case Corner.BottomRightCorner: + { //Testing if its outside the bottom right corner + if (xC >= h + x && yC >= k + y) return false; + else if (xC >= h + y && yC >= k + x) return false; + break; + } + case Corner.BottomLeftCorner: + { //Testing if its outside the bottom left corner + if (xC <= h - y && yC >= k + x) return false; + else if (xC <= h - x && yC >= k + y) return false; + break; + } + } + + x++; + + if (p < 0) + { + p += ((4 * x) + 6); + } + else + { + y--; + p += ((4 * (x - y)) + 10); + } + } while (x <= y); + + return true; + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/CropTransformation.cs b/source/FFImageLoading.Transformations.Wpf/CropTransformation.cs new file mode 100644 index 000000000..8d6a7af5d --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/CropTransformation.cs @@ -0,0 +1,125 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class CropTransformation : TransformationBase + { + public CropTransformation() : this(1d, 0d, 0d) + { + } + + public CropTransformation(double zoomFactor, double xOffset, double yOffset) : this(zoomFactor, xOffset, yOffset, 1f, 1f) + { + } + + public CropTransformation(double zoomFactor, double xOffset, double yOffset, double cropWidthRatio, double cropHeightRatio) + { + ZoomFactor = zoomFactor; + XOffset = xOffset; + YOffset = yOffset; + CropWidthRatio = cropWidthRatio; + CropHeightRatio = cropHeightRatio; + + if (ZoomFactor < 1f) + ZoomFactor = 1f; + } + + public double ZoomFactor { get; set; } + public double XOffset { get; set; } + public double YOffset { get; set; } + public double CropWidthRatio { get; set; } + public double CropHeightRatio { get; set; } + + public override string Key + { + get + { + return string.Format("CropTransformation,zoomFactor={0},xOffset={1},yOffset={2},cropWidthRatio={3},cropHeightRatio={4}", + ZoomFactor, XOffset, YOffset, CropWidthRatio, CropHeightRatio); + } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return ToCropped(bitmapSource, ZoomFactor, XOffset, YOffset, CropWidthRatio, CropHeightRatio); + } + + public static BitmapHolder ToCropped(BitmapHolder source, double zoomFactor, double xOffset, double yOffset, double cropWidthRatio, double cropHeightRatio) + { + double sourceWidth = source.Width; + double sourceHeight = source.Height; + + double desiredWidth = sourceWidth; + double desiredHeight = sourceHeight; + + double desiredRatio = cropWidthRatio / cropHeightRatio; + double currentRatio = sourceWidth / sourceHeight; + + if (currentRatio > desiredRatio) + desiredWidth = (cropWidthRatio * sourceHeight / cropHeightRatio); + else if (currentRatio < desiredRatio) + desiredHeight = (cropHeightRatio * sourceWidth / cropWidthRatio); + + xOffset = xOffset * desiredWidth; + yOffset = yOffset * desiredHeight; + + desiredWidth = desiredWidth / zoomFactor; + desiredHeight = desiredHeight / zoomFactor; + + float cropX = (float)(((sourceWidth - desiredWidth) / 2) + xOffset); + float cropY = (float)(((sourceHeight - desiredHeight) / 2) + yOffset); + + if (cropX < 0) + cropX = 0; + + if (cropY < 0) + cropY = 0; + + if (cropX + desiredWidth > sourceWidth) + cropX = (float)(sourceWidth - desiredWidth); + + if (cropY + desiredHeight > sourceHeight) + cropY = (float)(sourceHeight - desiredHeight); + + int width = (int)desiredWidth; + int height = (int)desiredHeight; + + // Copy the pixels line by line using fast BlockCopy + var result = new byte[width * height * 4]; + + for (var line = 0; line < height; line++) + { + var srcOff = (((int)cropY + line) * source.Width + (int)cropX) * ColorExtensions.SizeOfArgb; + var dstOff = line * width * ColorExtensions.SizeOfArgb; + Helpers.BlockCopy(source.PixelData, srcOff, result, dstOff, width * ColorExtensions.SizeOfArgb); + } + + return new BitmapHolder(result, width, height); + } + + public static BitmapHolder ToCropped(BitmapHolder source, int x, int y, int width, int height) + { + var srcWidth = source.Width; + var srcHeight = source.Height; + + // Clamp to boundaries + if (x < 0) x = 0; + if (x + width > srcWidth) width = srcWidth - x; + if (y < 0) y = 0; + if (y + height > srcHeight) height = srcHeight - y; + + // Copy the pixels line by line using fast BlockCopy + var result = new byte[width * height * 4]; + + for (var line = 0; line < height; line++) + { + var srcOff = ((y + line) * srcWidth + x) * ColorExtensions.SizeOfArgb; + var dstOff = line * width * ColorExtensions.SizeOfArgb; + Helpers.BlockCopy(source.PixelData, srcOff, result, dstOff, width * ColorExtensions.SizeOfArgb); + } + + return new BitmapHolder(result, width, height); + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/FFImageLoading.Transformations.Wpf.csproj b/source/FFImageLoading.Transformations.Wpf/FFImageLoading.Transformations.Wpf.csproj new file mode 100644 index 000000000..9a28e9b20 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/FFImageLoading.Transformations.Wpf.csproj @@ -0,0 +1,72 @@ + + + + + Debug + AnyCPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04} + Library + Properties + FFImageLoading.Transformations + FFImageLoading.Transformations + v4.7.1 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {0ad3a755-399a-4527-a001-6192724c67bb} + FFImageLoading + + + {dc06c582-6c7e-4018-a752-feb528c65f7e} + FFImageLoading.Wpf + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Transformations.Wpf/FlipTransformation.cs b/source/FFImageLoading.Transformations.Wpf/FlipTransformation.cs new file mode 100644 index 000000000..dfb1bfa63 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/FlipTransformation.cs @@ -0,0 +1,66 @@ +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class FlipTransformation : TransformationBase + { + public FlipTransformation() : this(FlipType.Horizontal) + { + } + + public FlipTransformation(FlipType flipType) + { + FlipType = flipType; + } + + public override string Key + { + get { return string.Format("FlipTransformation,Type={0}", FlipType); } + } + + public FlipType FlipType { get; set; } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return ToFlipped(bitmapSource, FlipType); + } + + public static BitmapHolder ToFlipped(BitmapHolder bmp, FlipType flipMode) + { + // Use refs for faster access (really important!) speeds up a lot! + var w = bmp.Width; + var h = bmp.Height; + var i = 0; + BitmapHolder result = new BitmapHolder(new byte[bmp.PixelData.Length], w, h); + + if (flipMode == FlipType.Vertical) + { + var rp = result.PixelData; + for (var y = h - 1; y >= 0; y--) + { + for (var x = 0; x < w; x++) + { + var srcInd = y * w + x; + result.SetPixel(i, bmp.GetPixel(srcInd)); + i++; + } + } + } + else + { + var rp = result.PixelData; + for (var y = 0; y < h; y++) + { + for (var x = w - 1; x >= 0; x--) + { + var srcInd = y * w + x; + result.SetPixel(i, bmp.GetPixel(srcInd)); + i++; + } + } + } + + return result; + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/FlipType.cs b/source/FFImageLoading.Transformations.Wpf/FlipType.cs new file mode 100644 index 000000000..755541ae5 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/FlipType.cs @@ -0,0 +1,11 @@ +using System; + +namespace FFImageLoading.Transformations +{ + public enum FlipType + { + Horizontal, + Vertical + } +} + diff --git a/source/FFImageLoading.Transformations.Wpf/GrayscaleTransformation.cs b/source/FFImageLoading.Transformations.Wpf/GrayscaleTransformation.cs new file mode 100644 index 000000000..9210a253c --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/GrayscaleTransformation.cs @@ -0,0 +1,46 @@ +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class GrayscaleTransformation : TransformationBase + { + public GrayscaleTransformation() + { + } + + public override string Key + { + get { return "GrayscaleTransformation"; } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + ToGrayscale(bitmapSource); + + return bitmapSource; + } + + public static void ToGrayscale(BitmapHolder bmp) + { + var nWidth = bmp.Width; + var nHeight = bmp.Height; + + var len = bmp.PixelCount; + + for (var i = 0; i < len; i++) + { + var color = bmp.GetPixel(i); + int a = color.A; + int r = color.R; + int g = color.G; + int b = color.B; + + // Convert to gray with constant factors 0.2126, 0.7152, 0.0722 + var gray = (r * 6966 + g * 23436 + b * 2366) >> 15; + r = g = b = gray; + + bmp.SetPixel(i, new ColorHolder(a, r, g, b)); + } + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/Helpers/Helpers.cs b/source/FFImageLoading.Transformations.Wpf/Helpers/Helpers.cs new file mode 100644 index 000000000..195a69193 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/Helpers/Helpers.cs @@ -0,0 +1,12 @@ +using System; + +namespace FFImageLoading.Transformations +{ + public static class Helpers + { + public static void BlockCopy(Array src, int srcOffset, Array dest, int destOffset, int count) + { + Buffer.BlockCopy(src, srcOffset, dest, destOffset, count); + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/Properties/AssemblyInfo.cs b/source/FFImageLoading.Transformations.Wpf/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..57fd649e1 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FFImageLoading.Wpf")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FFImageLoading.Wpf")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a63b1175-5fb5-4a9c-bcc5-8ac091876d04")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/FFImageLoading.Transformations.Wpf/RotateTransformation.cs b/source/FFImageLoading.Transformations.Wpf/RotateTransformation.cs new file mode 100644 index 000000000..84a8d4867 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/RotateTransformation.cs @@ -0,0 +1,193 @@ +using System; +using FFImageLoading.Work; +using FFImageLoading.Helpers; + +namespace FFImageLoading.Transformations +{ + public class RotateTransformation : TransformationBase + { + public RotateTransformation() : this(30d) + { + } + + public RotateTransformation(double degrees) : this(degrees, false, false) + { + } + + public RotateTransformation(double degrees, bool ccw) : this(degrees, ccw, false) + { + } + + public RotateTransformation(double degrees, bool ccw, bool resize) + { + Degrees = degrees; + CCW = ccw; + Resize = resize; + } + + public double Degrees { get; set; } + public bool CCW { get; set; } + public bool Resize { get; set; } + + public override string Key + { + get { return string.Format("RotateTransformation,degrees={0},ccw={1},resize={2}", Degrees, CCW, Resize); } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return ToRotated(bitmapSource, Degrees, CCW, Resize); + } + + public static BitmapHolder ToRotated(BitmapHolder source, double degrees, bool ccw, bool resize) + { + if (degrees == 0 || degrees % 360 == 0) + return source; + + if (ccw) + degrees = 360d - degrees; + + // rotating clockwise, so it's negative relative to Cartesian quadrants + double cnAngle = -1.0 * (Math.PI / 180) * degrees; + + // general iterators + int i, j; + // calculated indices in Cartesian coordinates + int x, y; + double fDistance, fPolarAngle; + // for use in neighboring indices in Cartesian coordinates + int iFloorX, iCeilingX, iFloorY, iCeilingY; + // calculated indices in Cartesian coordinates with trailing decimals + double fTrueX, fTrueY; + // for interpolation + double fDeltaX, fDeltaY; + + // interpolated "top" pixels + double fTopRed, fTopGreen, fTopBlue, fTopAlpha; + + // interpolated "bottom" pixels + double fBottomRed, fBottomGreen, fBottomBlue, fBottomAlpha; + + // final interpolated color components + int iRed, iGreen, iBlue, iAlpha; + + int iCentreX, iCentreY; + int iDestCentreX, iDestCentreY; + int iWidth, iHeight, newWidth, newHeight; + + iWidth = source.Width; + iHeight = source.Height; + + if (!resize || (degrees % 180 == 0)) + { + newWidth = iWidth; + newHeight = iHeight; + } + else + { + var rad = degrees / (180 / Math.PI); + newWidth = (int)Math.Ceiling(Math.Abs(Math.Sin(rad) * iHeight) + Math.Abs(Math.Cos(rad) * iWidth)); + newHeight = (int)Math.Ceiling(Math.Abs(Math.Sin(rad) * iWidth) + Math.Abs(Math.Cos(rad) * iHeight)); + } + + + iCentreX = iWidth / 2; + iCentreY = iHeight / 2; + + iDestCentreX = newWidth / 2; + iDestCentreY = newHeight / 2; + + var newSource = new BitmapHolder(new byte[newWidth * newHeight * 4], newWidth, newHeight); + var oldw = source.Width; + + // assigning pixels of destination image from source image + // with bilinear interpolation + for (i = 0; i < newHeight; ++i) + { + for (j = 0; j < newWidth; ++j) + { + // convert raster to Cartesian + x = j - iDestCentreX; + y = iDestCentreY - i; + + // convert Cartesian to polar + fDistance = Math.Sqrt(x * x + y * y); + if (x == 0) + { + if (y == 0) + { + // center of image, no rotation needed + newSource.SetPixel(i * newWidth + j, source.GetPixel(iCentreY * oldw + iCentreX)); + continue; + } + if (y < 0) + { + fPolarAngle = 1.5 * Math.PI; + } + else + { + fPolarAngle = 0.5 * Math.PI; + } + } + else + { + fPolarAngle = Math.Atan2(y, x); + } + + // the crucial rotation part + // "reverse" rotate, so minus instead of plus + fPolarAngle -= cnAngle; + + // convert polar to Cartesian + fTrueX = fDistance * Math.Cos(fPolarAngle); + fTrueY = fDistance * Math.Sin(fPolarAngle); + + // convert Cartesian to raster + fTrueX = fTrueX + iCentreX; + fTrueY = iCentreY - fTrueY; + + iFloorX = (int)(Math.Floor(fTrueX)); + iFloorY = (int)(Math.Floor(fTrueY)); + iCeilingX = (int)(Math.Ceiling(fTrueX)); + iCeilingY = (int)(Math.Ceiling(fTrueY)); + + // check bounds + if (iFloorX < 0 || iCeilingX < 0 || iFloorX >= iWidth || iCeilingX >= iWidth || iFloorY < 0 || + iCeilingY < 0 || iFloorY >= iHeight || iCeilingY >= iHeight) + continue; + + fDeltaX = fTrueX - iFloorX; + fDeltaY = fTrueY - iFloorY; + + var clrTopLeft = source.GetPixel(iFloorY * oldw + iFloorX); + var clrTopRight = source.GetPixel(iFloorY * oldw + iCeilingX); + var clrBottomLeft = source.GetPixel(iCeilingY * oldw + iFloorX); + var clrBottomRight = source.GetPixel(iCeilingY * oldw + iCeilingX); + + fTopAlpha = (1 - fDeltaX) * (clrTopLeft.A) + fDeltaX * (clrTopRight.A); + fTopRed = (1 - fDeltaX) * (clrTopLeft.R) + fDeltaX * (clrTopRight.R); + fTopGreen = (1 - fDeltaX) * (clrTopLeft.G) + fDeltaX * (clrTopRight.G); + fTopBlue = (1 - fDeltaX) * (clrTopLeft.B) + fDeltaX * (clrTopRight.B); + + // linearly interpolate horizontally between bottom neighbors + fBottomAlpha = (1 - fDeltaX) * (clrBottomLeft.A) + fDeltaX * (clrBottomRight.A); + fBottomRed = (1 - fDeltaX) * (clrBottomLeft.R) + fDeltaX * (clrBottomRight.R); + fBottomGreen = (1 - fDeltaX) * (clrBottomLeft.G) + fDeltaX * (clrBottomRight.G); + fBottomBlue = (1 - fDeltaX) * (clrBottomLeft.B) + fDeltaX * (clrBottomRight.B); + + // linearly interpolate vertically between top and bottom interpolated results + iRed = (int)(Math.Round((1 - fDeltaY) * fTopRed + fDeltaY * fBottomRed)); + iGreen = (int)(Math.Round((1 - fDeltaY) * fTopGreen + fDeltaY * fBottomGreen)); + iBlue = (int)(Math.Round((1 - fDeltaY) * fTopBlue + fDeltaY * fBottomBlue)); + iAlpha = (int)(Math.Round((1 - fDeltaY) * fTopAlpha + fDeltaY * fBottomAlpha)); + + var a = iAlpha + 1; + + newSource.SetPixel(i * newWidth + j, new ColorHolder(iAlpha, iRed, iGreen, iBlue)); + } + } + + return newSource; + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/RoundedTransformation.cs b/source/FFImageLoading.Transformations.Wpf/RoundedTransformation.cs new file mode 100644 index 000000000..1e688a01f --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/RoundedTransformation.cs @@ -0,0 +1,259 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Helpers; +using FFImageLoading.Work; +using System; + +namespace FFImageLoading.Transformations +{ + public class RoundedTransformation : TransformationBase + { + public RoundedTransformation() : this(30d) + { + } + + public RoundedTransformation(double radius) : this(radius, 1d, 1d) + { + } + + public RoundedTransformation(double radius, double cropWidthRatio, double cropHeightRatio) : this(radius, cropWidthRatio, cropHeightRatio, 0d, null) + { + } + + public RoundedTransformation(double radius, double cropWidthRatio, double cropHeightRatio, double borderSize, string borderHexColor) + { + Radius = radius; + CropWidthRatio = cropWidthRatio; + CropHeightRatio = cropHeightRatio; + BorderSize = borderSize; + BorderHexColor = borderHexColor; + } + + public double Radius { get; set; } + public double CropWidthRatio { get; set; } + public double CropHeightRatio { get; set; } + public double BorderSize { get; set; } + public string BorderHexColor { get; set; } + + public override string Key + { + get + { + return string.Format("RoundedTransformation,radius={0},cropWidthRatio={1},cropHeightRatio={2},borderSize={3},borderHexColor={4}", + Radius, CropWidthRatio, CropHeightRatio, BorderSize, BorderHexColor); + } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + return ToRounded(bitmapSource, (int)Radius, CropWidthRatio, CropHeightRatio, BorderSize, BorderHexColor); + } + + public static BitmapHolder ToRounded(BitmapHolder source, int rad, double cropWidthRatio, double cropHeightRatio, double borderSize, string borderHexColor) + { + double sourceWidth = source.Width; + double sourceHeight = source.Height; + + double desiredWidth = sourceWidth; + double desiredHeight = sourceHeight; + + double desiredRatio = cropWidthRatio / cropHeightRatio; + double currentRatio = sourceWidth / sourceHeight; + + if (currentRatio > desiredRatio) + desiredWidth = (cropWidthRatio * sourceHeight / cropHeightRatio); + else if (currentRatio < desiredRatio) + desiredHeight = (cropHeightRatio * sourceWidth / cropWidthRatio); + + double cropX = ((sourceWidth - desiredWidth) / 2); + double cropY = ((sourceHeight - desiredHeight) / 2); + + BitmapHolder bitmap = null; + + if (cropX != 0 || cropY != 0) + { + bitmap = CropTransformation.ToCropped(source, (int)cropX, (int)cropY, (int)(desiredWidth), (int)(desiredHeight)); + } + else + { + bitmap = new BitmapHolder(source.PixelData, source.Width, source.Height); + } + + if (rad == 0) + rad = (int)(Math.Min(desiredWidth, desiredHeight) / 2); + else rad = (int)(rad * (desiredWidth + desiredHeight) / 2 / 500); + + int w = (int)desiredWidth; + int h = (int)desiredHeight; + + var transparentColor = ColorHolder.Transparent; + + for (int y = 0; y < h; y++) + { + for (int x = 0; x < w; x++) + { + if (x <= rad && y <= rad) + { //top left corner + if (!CheckRoundedCorner(rad, rad, rad, Corner.TopLeftCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x >= w - rad && y <= rad) + { // top right corner + if (!CheckRoundedCorner(w - rad, rad, rad, Corner.TopRightCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x >= w - rad && y >= h - rad) + { // bottom right corner + if (!CheckRoundedCorner(w - rad, h - rad, rad, Corner.BottomRightCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + else if (x <= rad && y >= h - rad) + { // bottom left corner + if (!CheckRoundedCorner(rad, h - rad, rad, Corner.BottomLeftCorner, x, y)) + bitmap.SetPixel(y * w + x, transparentColor); + } + } + } + + //TODO draws a border - we should optimize that and add some anti-aliasing + //if (borderSize > 0d) + //{ + // borderSize = (borderSize * (desiredWidth + desiredHeight) / 2d / 500d); + // var borderColor = ColorHolder.Transparent; + + // try + // { + // borderColor = borderHexColor.ToColorFromHex(); + // } + // catch (Exception) + // { + // } + + // int intBorderSize = (int)Math.Ceiling(borderSize); + + // for (int i = 0; i < intBorderSize; i++) + // { + // CircleAA(bitmap, i, borderColor); + // } + //} + + return bitmap; + } + + private enum Corner + { + TopLeftCorner, + TopRightCorner, + BottomRightCorner, + BottomLeftCorner, + } + + private static bool CheckRoundedCorner(int h, int k, int r, Corner which, int xC, int yC) + { + int x = 0; + int y = r; + int p = (3 - (2 * r)); + + do + { + switch (which) + { + case Corner.TopLeftCorner: + { //Testing if its outside the top left corner + if (xC <= h - x && yC <= k - y) return false; + else if (xC <= h - y && yC <= k - x) return false; + break; + } + case Corner.TopRightCorner: + { //Testing if its outside the top right corner + if (xC >= h + y && yC <= k - x) return false; + else if (xC >= h + x && yC <= k - y) return false; + break; + } + case Corner.BottomRightCorner: + { //Testing if its outside the bottom right corner + if (xC >= h + x && yC >= k + y) return false; + else if (xC >= h + y && yC >= k + x) return false; + break; + } + case Corner.BottomLeftCorner: + { //Testing if its outside the bottom left corner + if (xC <= h - y && yC >= k + x) return false; + else if (xC <= h - x && yC >= k + y) return false; + break; + } + } + + x++; + + if (p < 0) + { + p += ((4 * x) + 6); + } + else + { + y--; + p += ((4 * (x - y)) + 10); + } + } while (x <= y); + + return true; + } + + // helper function, draws pixel and mirrors it + static void SetPixel4(BitmapHolder bitmap, int centerX, int centerY, int deltaX, int deltaY, ColorHolder color) + { + if (centerX + deltaX < bitmap.Width && centerY + deltaY < bitmap.Height) + bitmap.SetPixel(centerX + deltaX, centerY + deltaY, color); + + if (centerX - deltaX >= 0 && centerY + deltaY < bitmap.Height) + bitmap.SetPixel(centerX - deltaX, centerY + deltaY, color); + + if (centerX + deltaX < bitmap.Width && centerY - deltaY >= 0) + bitmap.SetPixel(centerX + deltaX, centerY - deltaY, color); + + if (centerX - deltaX >= 0 && centerY - deltaY >= 0) + bitmap.SetPixel(centerX - deltaX, centerY - deltaY, color); + } + + static void CircleAA(BitmapHolder bitmap, int size, ColorHolder color) + { + //if (size % 2 != 0) + // size++; + + int centerX = bitmap.Width / 2; + double radiusX = (bitmap.Width - size) / 2; + int centerY = bitmap.Height / 2; + double radiusY = (bitmap.Height - size) / 2; + + const int maxTransparency = 255; // default: 127 + double radiusX2 = radiusX * radiusX; + double radiusY2 = radiusY * radiusY; + + // upper and lower halves + int quarter = (int)Math.Round(radiusX2 / Math.Sqrt(radiusX2 + radiusY2)); + + for (int x = 0; x <= quarter; x++) + { + double y = Math.Floor(radiusY * Math.Sqrt(1 - x * x / radiusX2)); + double error = y - Math.Floor(y); + int transparency = (int)Math.Round(error * maxTransparency); + + //SetPixel4(bitmap, centerX, centerY, x, (int)Math.Floor(y), color); + SetPixel4(bitmap, centerX, centerY, x, (int)Math.Floor(y), new ColorHolder(transparency, color.R, color.G, color.B)); + SetPixel4(bitmap, centerX, centerY, x, (int)Math.Floor(y) + 1, new ColorHolder(maxTransparency - transparency, color.R, color.G, color.B)); + } + + // right and left halves + quarter = (int)Math.Round(radiusY2 / Math.Sqrt(radiusX2 + radiusY2)); + + for (int y = 0; y <= quarter; y++) + { + double x = Math.Floor(radiusX * Math.Sqrt(1 - y * y / radiusY2)); + double error = x - Math.Floor(x); + int transparency = (int)Math.Round(error * maxTransparency); + SetPixel4(bitmap, centerX, centerY, (int)Math.Floor(x), y, new ColorHolder(transparency, color.R, color.G, color.B)); + SetPixel4(bitmap, centerX, centerY, (int)Math.Floor(x) + 1, y, new ColorHolder(maxTransparency - transparency, color.R, color.G, color.B)); + } + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/SepiaTransformation.cs b/source/FFImageLoading.Transformations.Wpf/SepiaTransformation.cs new file mode 100644 index 000000000..844bef4a2 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/SepiaTransformation.cs @@ -0,0 +1,55 @@ +using System; +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public class SepiaTransformation : TransformationBase + { + public SepiaTransformation() + { + } + + public override string Key + { + get { return "SepiaTransformation"; } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + ToSepia(bitmapSource); + + return bitmapSource; + } + + public static void ToSepia(BitmapHolder bmp) + { + var nWidth = bmp.Width; + var nHeight = bmp.Height; + var len = bmp.PixelCount; + + for (var i = 0; i < len; i++) + { + var color = bmp.GetPixel(i); + int a = color.A; + int r = color.R; + int g = color.G; + int b = color.B; + + var rNew = (int)Math.Min((.393 * r) + (.769 * g) + (.189 * (b)), 255.0); + var gNew = (int)Math.Min((.349 * r) + (.686 * g) + (.168 * (b)), 255.0); + var bNew = (int)Math.Min((.272 * r) + (.534 * g) + (.131 * (b)), 255.0); + + if (rNew > 255) + rNew = 255; + + if (gNew > 255) + gNew = 255; + + if (bNew > 255) + bNew = 255; + + bmp.SetPixel(i, new ColorHolder(a, rNew, gNew, bNew)); + } + } + } +} diff --git a/source/FFImageLoading.Transformations.Wpf/TintTransformation.cs b/source/FFImageLoading.Transformations.Wpf/TintTransformation.cs new file mode 100644 index 000000000..eea8c8ff5 --- /dev/null +++ b/source/FFImageLoading.Transformations.Wpf/TintTransformation.cs @@ -0,0 +1,109 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Work; +using System; + +namespace FFImageLoading.Transformations +{ + public class TintTransformation : ColorSpaceTransformation + { + public TintTransformation() : this(0, 165, 0, 128) + { + } + + public TintTransformation(int r, int g, int b, int a) + { + R = r; + G = g; + B = b; + A = a; + } + + public TintTransformation(string hexColor) + { + HexColor = hexColor; + } + + string _hexColor; + public string HexColor + { + get + { + return _hexColor; + } + + set + { + _hexColor = value; + var color = value.ToColorFromHex(); + A = color.A; + R = color.R; + G = color.G; + B = color.B; + } + } + + public bool EnableSolidColor { get; set; } + + public int R { get; set; } + + public int G { get; set; } + + public int B { get; set; } + + public int A { get; set; } + + public override string Key + { + get + { + return string.Format("TintTransformation,R={0},G={1},B={2},A={3},HexColor={4},EnableSolidColor={5}", + R, G, B, A, HexColor, EnableSolidColor); + } + } + + protected override BitmapHolder Transform(BitmapHolder bitmapSource, string path, Work.ImageSource source, bool isPlaceholder, string key) + { + if (EnableSolidColor) + { + ToReplacedColor(bitmapSource, R, G, B, A); + return bitmapSource; + } + + RGBAWMatrix = FFColorMatrix.ColorToTintMatrix(R, G, B, A); + + return base.Transform(bitmapSource, path, source, isPlaceholder, key); + } + + public static void ToReplacedColor(BitmapHolder bmp, int r, int g, int b, int a) + { + var nWidth = bmp.Width; + var nHeight = bmp.Height; + var len = bmp.PixelCount; + float percentage = (float)a / 255; + float left = 1 - percentage; + int rMin = (int)(r - (r * left)); + int gMin = (int)(g - (g * left)); + int bMin = (int)(b - (b * left)); + int rMax = (int)(r + (r * left)); + int gMax = (int)(g + (g * left)); + int bMax = (int)(b + (b * left)); + + for (var i = 0; i < len; i++) + { + var color = bmp.GetPixel(i); + int currentAlpha = color.A; + var curR = color.R; + var curG = color.G; + var curB = color.B; + int rNew = (int)(curR + (255 - curR) * (percentage * r / 255)); + int gNew = (int)(curG + (255 - curG) * (percentage * g / 255)); + int bNew = (int)(curB + (255 - curB) * (percentage * b / 255)); + rNew = Math.Min(Math.Max(rMin, rNew), rMax); + gNew = Math.Min(Math.Max(gMin, gNew), gMax); + bNew = Math.Min(Math.Max(bMin, bNew), bMax); + + bmp.SetPixel(i, new ColorHolder(color.A, rNew, gNew, bNew)); + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Cache/FFSourceBindingCache.cs b/source/FFImageLoading.Wpf/Cache/FFSourceBindingCache.cs new file mode 100644 index 000000000..c12b1f3b1 --- /dev/null +++ b/source/FFImageLoading.Wpf/Cache/FFSourceBindingCache.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace FFImageLoading.Cache +{ + /// + /// This class optimizes the call to "StorageFile.GetFileFromPathAsync" that is time consuming. + /// The source of each image is the key of the cache... once a source has been checked the first time, any other control can be skipped + /// + public static class FFSourceBindingCache + { + private static Dictionary> _cache = new Dictionary>(128); + + public static async Task IsFileAsync(string path) + { + + if (_cache.ContainsKey(path)) + { + return _cache[path].Item1; + } + else + { + if (_cache.Count >= 128) + { + _cache.Clear(); + } + + StorageFile file = await GetFileAsync(path); + _cache.Add(path, new Tuple(file != null, file)); + return file != null; + } + } + + public static async Task GetFileAsync(string path) + { + StorageFile file = null; + try + { + var filePath = System.IO.Path.GetDirectoryName(path); + if (!string.IsNullOrWhiteSpace(filePath) && !(filePath.TrimStart('\\', '/')).StartsWith("Assets")) + { + file = await StorageFile.GetFileFromPathAsync(path); + } + } + catch (Exception) + { + } + + return file; + } + } +} diff --git a/source/FFImageLoading.Wpf/Cache/IImageCache.cs b/source/FFImageLoading.Wpf/Cache/IImageCache.cs new file mode 100644 index 000000000..530aac8d9 --- /dev/null +++ b/source/FFImageLoading.Wpf/Cache/IImageCache.cs @@ -0,0 +1,8 @@ +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Cache +{ + interface IImageCache : IMemoryCache + { + } +} diff --git a/source/FFImageLoading.Wpf/Cache/ImageCache.cs b/source/FFImageLoading.Wpf/Cache/ImageCache.cs new file mode 100644 index 000000000..50d2ff9f0 --- /dev/null +++ b/source/FFImageLoading.Wpf/Cache/ImageCache.cs @@ -0,0 +1,110 @@ +using System; +using FFImageLoading.Work; +using FFImageLoading.Helpers; +using System.Linq; +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Cache +{ + class ImageCache : IImageCache + { + private static IImageCache _instance; + private readonly WriteableBitmapLRUCache _reusableBitmaps; + private readonly IMiniLogger _logger; + + private ImageCache(int maxCacheSize, IMiniLogger logger) + { + _logger = logger; + + if (maxCacheSize == 0) + { + //TODO Does anyone know how we could get available app ram from WinRT API? + //EasClientDeviceInformation deviceInfo = new EasClientDeviceInformation(); + //if (deviceInfo.OperatingSystem.ToLowerInvariant().Contains("phone")) + // maxCacheSize = 1000000 * 64; //64MB + //else + maxCacheSize = 1000000 * 256; //256MB + + _logger?.Debug($"Memory cache size: {maxCacheSize} bytes"); + } + + _reusableBitmaps = new WriteableBitmapLRUCache(maxCacheSize); + } + + public static IImageCache Instance + { + get + { + return _instance ?? (_instance = new ImageCache(ImageService.Instance.Config.MaxMemoryCacheSize, ImageService.Instance.Config.Logger)); + } + } + + public void Add(string key, ImageInformation imageInformation, BitmapSource bitmap) + { + if (string.IsNullOrWhiteSpace(key) || bitmap == null) + return; + + _reusableBitmaps.TryAdd(key, new Tuple(bitmap, imageInformation)); + } + + public ImageInformation GetInfo(string key) + { + Tuple cacheEntry; + if (_reusableBitmaps.TryGetValue (key, out cacheEntry)) + { + return cacheEntry.Item2; + } + + return null; + } + + public Tuple Get(string key) + { + if (string.IsNullOrWhiteSpace(key)) + return null; + + Tuple cacheEntry; + + if (_reusableBitmaps.TryGetValue(key, out cacheEntry) && cacheEntry.Item1 != null) + { + return new Tuple(cacheEntry.Item1, cacheEntry.Item2); + } + + return null; + } + + public void Clear() + { + _reusableBitmaps.Clear(); + + // Force immediate Garbage collection. Please note that is resource intensive. + GC.Collect(); + GC.WaitForPendingFinalizers(); + GC.WaitForPendingFinalizers(); + GC.Collect(); + } + + public void Remove(string key) + { + if (string.IsNullOrWhiteSpace(key)) + return; + + _logger.Debug (string.Format ("Called remove from memory cache for '{0}'", key)); + _reusableBitmaps.Remove(key); + } + + public void RemoveSimilar(string baseKey) + { + if (string.IsNullOrWhiteSpace(baseKey)) + return; + + var pattern = baseKey + ";"; + + var keysToRemove = _reusableBitmaps.Keys.Where(i => i.StartsWith(pattern, StringComparison.OrdinalIgnoreCase)).ToList(); + foreach (var key in keysToRemove) + { + Remove(key); + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Cache/LRUCache.cs b/source/FFImageLoading.Wpf/Cache/LRUCache.cs new file mode 100644 index 000000000..48120b75a --- /dev/null +++ b/source/FFImageLoading.Wpf/Cache/LRUCache.cs @@ -0,0 +1,182 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFImageLoading.Cache +{ + public abstract class LRUCache where TKey : class where TValue : class + { + private readonly object _lockObj = new object(); + private int _currentSize; + private Dictionary>> _cacheMap = new Dictionary>>(); + protected LinkedList> _lruList = new LinkedList>(); + + protected int _capacity; + + public LRUCache(int capacity) + { + _capacity = capacity; + } + + public abstract int GetValueSize(TValue value); + + public bool ContainsKey(TKey key) + { + TValue dummy; + return TryGetValue(key, out dummy); + } + + public TValue Get(TKey key) + { + lock (_lockObj) + { + LinkedListNode> node; + if (_cacheMap.TryGetValue(key, out node)) + { + TValue value = node.Value.Value; + _lruList.Remove(node); + _lruList.AddLast(node); + return value; + } + return default(TValue); + } + } + + public bool TryAdd(TKey key, TValue value) + { + lock (_lockObj) + { + CleanAbandonedItems(); + + if (_cacheMap.ContainsKey(key)) + { + return false; + } + this.CheckSize(key, value); + LRUCacheItem cacheItem = new LRUCacheItem(key, value); + LinkedListNode> node = + new LinkedListNode>(cacheItem); + _lruList.AddLast(node); + _cacheMap.Add(key, node); + + return true; + } + } + + public bool TryGetValue(TKey key, out TValue value) + { + lock (_lockObj) + { + LinkedListNode> node; + if (_cacheMap.TryGetValue(key, out node)) + { + value = node.Value.Value; + + if (value == null) + { + Remove(key); + return false; + } + + _lruList.Remove(node); + _lruList.AddLast(node); + return true; + } + value = default(TValue); + return false; + } + } + + public void Clear() + { + lock (_lockObj) + { + _cacheMap.Clear(); + _lruList.Clear(); + } + } + + public IList Keys + { + get + { + lock (_lockObj) + { + return _cacheMap.Keys.ToList(); + } + } + } + + public IList Values + { + get + { + lock (_lockObj) + { + return _cacheMap.Values.Select(v => v.Value.Value).ToList(); + } + } + } + + void CleanAbandonedItems() + { + //TODO? + } + + protected virtual bool CheckSize(TKey key, TValue value) + { + var size = GetValueSize(value); + _currentSize += size; + + while (_currentSize > _capacity && _lruList.Count > 0) + { + this.RemoveFirst(); + } + + return true; + } + + public void Remove(TKey key) + { + LinkedListNode> node; + if (_cacheMap.TryGetValue(key, out node)) + { + _lruList.Remove(node); + } + } + + protected virtual void RemoveNode(LinkedListNode> node) + { + _lruList.Remove(node); + _cacheMap.Remove(node.Value.Key); + _currentSize -= GetValueSize(node.Value.Value); + } + + protected void RemoveFirst() + { + LinkedListNode> node = _lruList.First; + this.RemoveNode(node); + } + + protected class LRUCacheItem + { + public LRUCacheItem(K k, V v) + { + Key = k; + Value = v; + } + public K Key + { + get; + private set; + } + public V Value + { + get; + private set; + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Cache/SimpleDiskCache.cs b/source/FFImageLoading.Wpf/Cache/SimpleDiskCache.cs new file mode 100644 index 000000000..474562d04 --- /dev/null +++ b/source/FFImageLoading.Wpf/Cache/SimpleDiskCache.cs @@ -0,0 +1,343 @@ +using System; +using System.Collections.Concurrent; +using System.Text; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using System.Collections.Generic; +using System.IO; +using System.IO.IsolatedStorage; +using FFImageLoading.Cache; +using FFImageLoading.Config; +using FFImageLoading.Helpers; + + +namespace FFImageLoading.Cache +{ + public class SimpleDiskCache : IDiskCache + { + readonly SemaphoreSlim fileWriteLock = new SemaphoreSlim(1, 1); + readonly SemaphoreSlim _currentWriteLock = new SemaphoreSlim(1, 1); + Task initTask = null; + string cacheFolderName; + IsolatedStorageFile rootFolder; + IsolatedStorageFile cacheFolder; + ConcurrentDictionary fileWritePendingTasks = new ConcurrentDictionary(); + ConcurrentDictionary entries = new ConcurrentDictionary(); + Task _currentWrite = Task.FromResult(1); + + /// + /// Initializes a new instance of the class. This constructor attempts + /// to create a folder of the given name under the . + /// + /// The name of the cache folder. + /// The configuration object. + public SimpleDiskCache(string cacheFolderName, Configuration configuration) + { + Configuration = configuration; + this.cacheFolderName = cacheFolderName; + initTask = Init(); + } + + /// + /// Initializes a new instance of the class. This constructor attempts + /// to create a folder of the given name under the given root . + /// + /// The root folder where the cache folder will be created. + /// The cache folder name. + /// The configuration object. + public SimpleDiskCache(IsolatedStorageFile rootFolder, string cacheFolderName, Configuration configuration) + { + Configuration = configuration; + this.rootFolder = rootFolder ?? IsolatedStorageFile.GetUserStoreForApplication(); + this.cacheFolderName = cacheFolderName; + initTask = Init(); + } + + protected Configuration Configuration { get; private set; } + protected IMiniLogger Logger { get { return Configuration.Logger; } } + + protected virtual async Task Init() + { + try + { + CreateCacheDirIfNotExists(); + await InitializeEntries().ConfigureAwait(false); + } + catch + { + rootFolder.DeleteDirectory(cacheFolderName); + CreateCacheDirIfNotExists(); + } + finally + { + var task = CleanCallback(); + } + } + + private void CreateCacheDirIfNotExists() + { + if (!rootFolder.DirectoryExists(cacheFolderName)) + rootFolder.CreateDirectory(cacheFolderName); + } + + protected virtual async Task InitializeEntries() + { + foreach (var file in GetAllEntries()) + { + var name = Path.GetFileName(file); + var key = Path.GetFileNameWithoutExtension(file); + var ext = Path.GetExtension(file); + var duration = GetDuration(ext); + var created = rootFolder.GetCreationTime(file); + entries.TryAdd(key, new CacheEntry(created.UtcDateTime, duration, name)); + } + } + + protected virtual TimeSpan GetDuration(string text) + { + string textToParse = text.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(); + if (string.IsNullOrWhiteSpace(textToParse)) + return Configuration.DiskCacheDuration; + + int duration; + return int.TryParse(textToParse, out duration) ? TimeSpan.FromSeconds(duration) : Configuration.DiskCacheDuration; + } + + protected virtual async Task CleanCallback() + { + var now = DateTime.UtcNow; + var kvps = entries.Where(kvp => kvp.Value.Origin + kvp.Value.TimeToLive < now).ToArray(); + + foreach (var kvp in kvps) + { + if (entries.TryRemove(kvp.Key, out var oldCacheEntry)) + { + try + { + Logger.Debug(string.Format("SimpleDiskCache: Removing expired file {0}", kvp.Key)); + rootFolder.DeleteFile(GetCacheFileName(oldCacheEntry.FileName)); + } + catch + { + } + } + } + } + + /// + /// GetFilePath + /// + /// + /// + public virtual async Task GetFilePathAsync(string key) + { + await initTask.ConfigureAwait(false); + + CacheEntry entry; + if (!entries.TryGetValue(key, out entry)) + return null; + + return Path.Combine(rootFolder.ToString(), GetCacheFileName(entry.FileName)); + } + + /// + /// Checks if cache entry exists/ + /// + /// The async. + /// Key. + public virtual async Task ExistsAsync(string key) + { + await initTask.ConfigureAwait(false); + + return entries.ContainsKey(key); + } + + /// + /// Adds the file to cache and file saving queue if not exists. + /// + /// Key. + /// Bytes. + /// Duration. + public virtual async Task AddToSavingQueueIfNotExistsAsync(string key, byte[] bytes, TimeSpan duration, Action writeFinished = null) + { + await initTask.ConfigureAwait(false); + + if (!fileWritePendingTasks.TryAdd(key, 1)) + return; + + await _currentWriteLock.WaitAsync().ConfigureAwait(false); // Make sure we don't add multiple continuations to the same task + + try + { + _currentWrite = _currentWrite.ContinueWith(async t => + { + await Task.Yield(); // forces it to be scheduled for later + + await initTask.ConfigureAwait(false); + + try + { + await fileWriteLock.WaitAsync().ConfigureAwait(false); + + CreateCacheDirIfNotExists(); + string filename = key + "." + (long)duration.TotalSeconds; + + var file = rootFolder.CreateFile(GetCacheFileName(filename)); + + //using (var fs = await file.OpenStreamForWriteAsync().ConfigureAwait(false)) + { + await file.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false); + } + + entries[key] = new CacheEntry(DateTime.UtcNow, duration, filename); + writeFinished?.Invoke(); + } + catch (Exception ex) // Since we don't observe the task (it's not awaited, we should catch all exceptions) + { + //TODO WinRT doesn't have Console + System.Diagnostics.Debug.WriteLine(string.Format("An error occured while caching to disk image '{0}'.", key)); + System.Diagnostics.Debug.WriteLine(ex.ToString()); + } + finally + { + byte finishedTask; + fileWritePendingTasks.TryRemove(key, out finishedTask); + fileWriteLock.Release(); + } + }); + } + finally + { + _currentWriteLock.Release(); + } + } + + /// + /// Tries to get cached file as stream. + /// + /// The get async. + /// Key. + public virtual async Task TryGetStreamAsync(string key) + { + await initTask.ConfigureAwait(false); + + await WaitForPendingWriteIfExists(key).ConfigureAwait(false); + + try + { + CacheEntry entry; + if (!entries.TryGetValue(key, out entry)) + return null; + + try + { + return GetFileStream(key); + } + catch (IOException) + { + CreateCacheDirIfNotExists(); + } + return null; + } + catch + { + return null; + } + } + + private Stream GetFileStream(string key) + { + var file = GetCacheFileName(key); + if (!rootFolder.FileExists(file)) + { + return null; + } + + return rootFolder.OpenFile(file, FileMode.Create, FileAccess.Read); + } + + private string GetCacheFileName(string file) + { + return $"{cacheFolderName}/{file}"; + } + /// + /// Removes the specified cache entry. + /// + /// Key. + public virtual async Task RemoveAsync(string key) + { + await initTask.ConfigureAwait(false); + + await WaitForPendingWriteIfExists(key).ConfigureAwait(false); + + CacheEntry oldCacheEntry; + if (entries.TryRemove(key, out oldCacheEntry)) + { + try + { + var file = GetCacheFileName(key); + if (rootFolder.FileExists(file)) + { + rootFolder.DeleteFile(file); + } + } + catch + { + } + } + } + + /// + /// Clears all cache entries. + /// + public virtual async Task ClearAsync() + { + await initTask.ConfigureAwait(false); + + while (fileWritePendingTasks.Count != 0) + { + await Task.Delay(20).ConfigureAwait(false); + } + + try + { + await fileWriteLock.WaitAsync().ConfigureAwait(false); + + //var entriesToRemove = rootFolder.GetFileNames($"{cacheFolderName}/*"); + //foreach (var item in entriesToRemove) + { + try + { + rootFolder.DeleteDirectory(cacheFolderName); + } + catch (FileNotFoundException) + { + } + } + } + catch (IOException) + { + CreateCacheDirIfNotExists(); + } + finally + { + entries.Clear(); + fileWriteLock.Release(); + } + } + + private string[] GetAllEntries() + { + return rootFolder.GetFileNames($"{cacheFolderName}/*"); + } + + protected virtual async Task WaitForPendingWriteIfExists(string key) + { + while (fileWritePendingTasks.ContainsKey(key)) + { + await Task.Delay(20).ConfigureAwait(false); + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Cache/WriteableBitmapLRUCache.cs b/source/FFImageLoading.Wpf/Cache/WriteableBitmapLRUCache.cs new file mode 100644 index 000000000..57b44e738 --- /dev/null +++ b/source/FFImageLoading.Wpf/Cache/WriteableBitmapLRUCache.cs @@ -0,0 +1,24 @@ +using FFImageLoading.Work; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Media.Imaging; +namespace FFImageLoading.Cache +{ + public class WriteableBitmapLRUCache : LRUCache> + { + public WriteableBitmapLRUCache(int capacity) : base(capacity) + { + } + + public override int GetValueSize(Tuple value) + { + if (value?.Item2 == null) + return 0; + + return value.Item2.CurrentHeight * value.Item2.CurrentWidth * 4; + } + } +} diff --git a/source/FFImageLoading.Wpf/DataResolvers/DataResolverFactory.cs b/source/FFImageLoading.Wpf/DataResolvers/DataResolverFactory.cs new file mode 100644 index 000000000..f25d70575 --- /dev/null +++ b/source/FFImageLoading.Wpf/DataResolvers/DataResolverFactory.cs @@ -0,0 +1,32 @@ +using FFImageLoading.Cache; +using FFImageLoading.Config; +using FFImageLoading.Work; +using System; + +namespace FFImageLoading.DataResolvers +{ + public class DataResolverFactory : IDataResolverFactory + { + public virtual IDataResolver GetResolver(string identifier, ImageSource source, TaskParameter parameters, Configuration configuration) + { + switch (source) + { + case ImageSource.ApplicationBundle: + case ImageSource.CompiledResource: + return new ResourceDataResolver(); + case ImageSource.Filepath: + return new FileDataResolver(); + case ImageSource.Url: + if (!string.IsNullOrWhiteSpace(identifier) && identifier.IsDataUrl()) + return new DataUrlResolver(); + return new UrlDataResolver(configuration); + case ImageSource.Stream: + return new StreamDataResolver(); + case ImageSource.EmbeddedResource: + return new EmbeddedResourceResolver(); + default: + throw new NotSupportedException("Unknown type of ImageSource"); + } + } + } +} diff --git a/source/FFImageLoading.Wpf/DataResolvers/FileDataResolver.cs b/source/FFImageLoading.Wpf/DataResolvers/FileDataResolver.cs new file mode 100644 index 000000000..d0d554a00 --- /dev/null +++ b/source/FFImageLoading.Wpf/DataResolvers/FileDataResolver.cs @@ -0,0 +1,30 @@ +using FFImageLoading.Work; +using System; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using FFImageLoading.IO; + +namespace FFImageLoading.DataResolvers +{ + public class FileDataResolver : IDataResolver + { + public virtual Task Resolve(string identifier, TaskParameter parameters, CancellationToken token) + { + if (!FileStore.Exists(identifier)) + { + throw new FileNotFoundException(identifier); + } + + token.ThrowIfCancellationRequested(); + + var stream = FileStore.GetInputStream(identifier, true); + + var imageInformation = new ImageInformation(); + imageInformation.SetPath(identifier); + imageInformation.SetFilePath(identifier); + + return Task.FromResult(new DataResolverResult(stream, LoadingResult.Disk, imageInformation)); + } + } +} diff --git a/source/FFImageLoading.Wpf/DataResolvers/ResourceDataResolver.cs b/source/FFImageLoading.Wpf/DataResolvers/ResourceDataResolver.cs new file mode 100644 index 000000000..a06cee8a9 --- /dev/null +++ b/source/FFImageLoading.Wpf/DataResolvers/ResourceDataResolver.cs @@ -0,0 +1,90 @@ +using FFImageLoading.Work; +using System; +using System.Threading; +using System.Threading.Tasks; +using System.IO; +using System.Collections.Generic; +using System.Windows; +using System.Windows.Media.Imaging; +using System.Windows.Resources; +using FFImageLoading.Extensions; + +namespace FFImageLoading.DataResolvers +{ + public class ResourceDataResolver : IDataResolver + { + private static readonly SemaphoreSlim _cacheLock = new SemaphoreSlim(1, 1); + private static Dictionary _cache = new Dictionary(128); + + public async virtual Task Resolve(string identifier, TaskParameter parameters, CancellationToken token) + { + StreamResourceInfo image = null; + await _cacheLock.WaitAsync(token).ConfigureAwait(false); + token.ThrowIfCancellationRequested(); + Uri imgUri=null; + try + { + string resPath = identifier.TrimStart('\\', '/'); + + if (!resPath.StartsWith(@"Assets\", StringComparison.OrdinalIgnoreCase) && !resPath.StartsWith("Assets/", StringComparison.OrdinalIgnoreCase)) + { + resPath = @"Assets\" + resPath; + } + + imgUri = new Uri($"pack://application:,,,/{resPath}"); + var key = imgUri.ToString(); + if (!_cache.TryGetValue(key, out image)) + { + image = Application.GetResourceStream(imgUri); + + //image = new BitmapImage(imgUri); + + if (_cache.Count >= 128) + _cache.Clear(); + + _cache[key] = image; + } + } + catch (Exception) + { + try + { + imgUri = new Uri($"pack://application:,,,/{identifier}"); + //imgUri = new Uri(identifier, UriKind.RelativeOrAbsolute); + var key = imgUri.ToString(); + if (!_cache.TryGetValue(key, out image)) + { + image = Application.GetResourceStream(imgUri); + + if (_cache.Count >= 128) + _cache.Clear(); + + _cache[key] = image; + } + } + catch (Exception) + { + } + } + finally + { + _cacheLock.Release(); + } + + if (image != null) + { + var imageInformation = new ImageInformation(); + imageInformation.SetPath(identifier); + imageInformation.SetFilePath(imgUri.ToString()); + + token.ThrowIfCancellationRequested(); + + var s = await image.Stream.AsRandomAccessStream(); + s.Seek(0, SeekOrigin.Begin); + return new DataResolverResult(s, LoadingResult.CompiledResource, imageInformation); + } + + throw new FileNotFoundException(identifier); + } + } +} diff --git a/source/FFImageLoading.Wpf/Decoders/BaseDecoder.cs b/source/FFImageLoading.Wpf/Decoders/BaseDecoder.cs new file mode 100644 index 000000000..dc64467a0 --- /dev/null +++ b/source/FFImageLoading.Wpf/Decoders/BaseDecoder.cs @@ -0,0 +1,39 @@ +using FFImageLoading.Config; +using FFImageLoading.Extensions; +using FFImageLoading.Helpers; +using FFImageLoading.Work; +using System; +using System.IO; +using System.Threading.Tasks; + +namespace FFImageLoading.Decoders +{ + public class BaseDecoder : IDecoder + { + public async Task> DecodeAsync(Stream imageData, string path, ImageSource source, ImageInformation imageInformation, TaskParameter parameters) + { + BitmapHolder imageIn = null; + + if (imageData == null) + throw new ArgumentNullException(nameof(imageData)); + + bool allowUpscale = parameters.AllowUpscale ?? Configuration.AllowUpscale; + + if (parameters.Transformations == null || parameters.Transformations.Count == 0) + { + var bitmap = await imageData.ToBitmapImageAsync(parameters.DownSampleSize, parameters.DownSampleUseDipUnits, parameters.DownSampleInterpolationMode, allowUpscale, imageInformation).ConfigureAwait(false); + imageIn = new BitmapHolder(bitmap); + } + else + { + imageIn = await imageData.ToBitmapHolderAsync(parameters.DownSampleSize, parameters.DownSampleUseDipUnits, parameters.DownSampleInterpolationMode, allowUpscale, imageInformation).ConfigureAwait(false); + } + + return new DecodedImage() { Image = imageIn }; + } + + public Configuration Configuration => ImageService.Instance.Config; + + public IMiniLogger Logger => ImageService.Instance.Config.Logger; + } +} diff --git a/source/FFImageLoading.Wpf/Extensions/ColorExtensions.cs b/source/FFImageLoading.Wpf/Extensions/ColorExtensions.cs new file mode 100644 index 000000000..4453a4b06 --- /dev/null +++ b/source/FFImageLoading.Wpf/Extensions/ColorExtensions.cs @@ -0,0 +1,86 @@ +using FFImageLoading.Helpers; +using System; + +namespace FFImageLoading.Extensions +{ + public static class ColorExtensions + { + public const int SizeOfArgb = 4; + + //public static int ToInt(this ColorHolder color) + //{ + // var col = 0; + + // if (color.A != 0) + // { + // var a = color.A + 1; + // col = (color.A << 24) + // | ((byte)((color.R * a) >> 8) << 16) + // | ((byte)((color.G * a) >> 8) << 8) + // | ((byte)((color.B * a) >> 8)); + // } + + // return col; + //} + + public static ColorHolder ToColorFromHex(this string hexColor) + { + if (string.IsNullOrWhiteSpace(hexColor)) + throw new ArgumentException("Invalid color string.", nameof(hexColor)); + + if (!hexColor.StartsWith("#", StringComparison.Ordinal)) + hexColor.Insert(0, "#"); + + switch (hexColor.Length) + { + case 9: + { + var cuint = Convert.ToUInt32(hexColor.Substring(1), 16); + var a = (byte)(cuint >> 24); + var r = (byte)((cuint >> 16) & 0xff); + var g = (byte)((cuint >> 8) & 0xff); + var b = (byte)(cuint & 0xff); + + return new ColorHolder(a, r, g, b); + } + case 7: + { + var cuint = Convert.ToUInt32(hexColor.Substring(1), 16); + var r = (byte)((cuint >> 16) & 0xff); + var g = (byte)((cuint >> 8) & 0xff); + var b = (byte)(cuint & 0xff); + + return new ColorHolder(255, r, g, b); + } + case 5: + { + var cuint = Convert.ToUInt16(hexColor.Substring(1), 16); + var a = (byte)(cuint >> 12); + var r = (byte)((cuint >> 8) & 0xf); + var g = (byte)((cuint >> 4) & 0xf); + var b = (byte)(cuint & 0xf); + a = (byte)(a << 4 | a); + r = (byte)(r << 4 | r); + g = (byte)(g << 4 | g); + b = (byte)(b << 4 | b); + + return new ColorHolder(a, r, g, b); + } + case 4: + { + var cuint = Convert.ToUInt16(hexColor.Substring(1), 16); + var r = (byte)((cuint >> 8) & 0xf); + var g = (byte)((cuint >> 4) & 0xf); + var b = (byte)(cuint & 0xf); + r = (byte)(r << 4 | r); + g = (byte)(g << 4 | g); + b = (byte)(b << 4 | b); + + return new ColorHolder(255, r, g, b); + } + default: + throw new FormatException(string.Format("The {0} string is not a recognized HexColor format.", hexColor)); + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Extensions/ImageExtensions.cs b/source/FFImageLoading.Wpf/Extensions/ImageExtensions.cs new file mode 100644 index 000000000..e7a9bb239 --- /dev/null +++ b/source/FFImageLoading.Wpf/Extensions/ImageExtensions.cs @@ -0,0 +1,173 @@ +using FFImageLoading.Work; +using System; +using System.IO; +using System.Threading.Tasks; +using System.Windows.Media; +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Extensions +{ + public static class ImageExtensions + { + public static async Task AsRandomAccessStream(this Stream from) + { + var ms = new MemoryStream(); + from.Seek(0, SeekOrigin.Begin); + await from.CopyToAsync(ms); + ms.Seek(0, SeekOrigin.Begin); + return ms; + } + public static async Task ToBitmapImageAsync(this BitmapHolder holder) + { + if (holder?.PixelData == null) + return null; + + WriteableBitmap writeableBitmap = null; + + await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(async () => + { + writeableBitmap = await holder.ToWriteableBitmap(); + }); + + return writeableBitmap; + } + + private static Task ToWriteableBitmap(this BitmapHolder holder) + { + var wb = new WriteableBitmap( + holder.Width, + holder.Height, + 96, + 96, + PixelFormats.Bgra32, + null); + return Task.FromResult(wb.FromByteArray(holder.PixelData)); + + } + public static Task ToWriteableBitmap(this Stream holder) + { + try + { + holder.Seek(0, SeekOrigin.Begin); + return Task.FromResult(BitmapFactory.FromStream(holder)); + } + catch (Exception ex) + { + throw; + } + } + + public async static Task ToBitmapImageAsync(this Stream imageStream, Tuple downscale, bool downscaleDipUnits, InterpolationMode mode, bool allowUpscale, ImageInformation imageInformation = null) + { + if (imageStream == null) + return null; + + using (var image = await imageStream.AsRandomAccessStream()) + { + if (downscale != null && (downscale.Item1 > 0 || downscale.Item2 > 0)) + { + using (var downscaledImage = await image.ResizeImage(downscale.Item1, downscale.Item2, mode, downscaleDipUnits, allowUpscale, imageInformation).ConfigureAwait(false)) + { + downscaledImage.Seek(0, SeekOrigin.Begin); + WriteableBitmap resizedBitmap = null; + + await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(async () => + { + resizedBitmap = await downscaledImage.ToWriteableBitmap(); + }); + + return resizedBitmap; + } + } + else + { + WriteableBitmap bitmap = null; + + await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(async () => + { + bitmap = await imageStream.ToWriteableBitmap(); + if (imageInformation != null) + { + imageInformation.SetCurrentSize(bitmap.PixelWidth, bitmap.PixelHeight); + imageInformation.SetOriginalSize(bitmap.PixelWidth, bitmap.PixelHeight); + } + }); + + return bitmap; + } + } + } + + public async static Task ToBitmapHolderAsync(this Stream imageStream, Tuple downscale, bool downscaleDipUnits, InterpolationMode mode, bool allowUpscale, ImageInformation imageInformation = null) + { + if (imageStream == null) + return null; + + + Stream src; + using (var image = await imageStream.AsRandomAccessStream()) + { + if (downscale != null && (downscale.Item1 > 0 || downscale.Item2 > 0)) + { + var downscaledImage = await image.ResizeImage(downscale.Item1, downscale.Item2, mode, + downscaleDipUnits, allowUpscale, imageInformation).ConfigureAwait(false); + { + src = downscaledImage; + } + } + else + { + src = image; + } + src.Seek(0, SeekOrigin.Begin); + var wb = BitmapFactory.FromStream(src); + + + if (imageInformation != null) + { + imageInformation.SetCurrentSize(wb.PixelWidth, wb.PixelHeight); + imageInformation.SetOriginalSize(wb.PixelWidth, wb.PixelHeight); + } + + return new BitmapHolder(BitmapFactory.ConvertToPbgra32Format(wb).ToByteArray(), wb.PixelWidth, wb.PixelHeight); + } + } + + public static async Task ResizeImage(this MemoryStream imageStream, int width, int height, InterpolationMode interpolationMode, bool useDipUnits, bool allowUpscale, ImageInformation imageInformation = null) + { + if (useDipUnits) + { + width = width.DpToPixels(); + height = height.DpToPixels(); + } + + var wb = await imageStream.ToWriteableBitmap(); + var widthRatio = (double)width / wb.PixelWidth; + var heightRatio = (double)height / wb.PixelHeight; + var scaleRatio = Math.Min(widthRatio, heightRatio); + if (width == 0) + scaleRatio = heightRatio; + + if (height == 0) + scaleRatio = widthRatio; + + var bitmap = new TransformedBitmap(wb, new ScaleTransform(scaleRatio,scaleRatio)); + + var bmp = new MemoryStream(); + BitmapEncoder enc = new BmpBitmapEncoder(); + enc.Frames.Add(BitmapFrame.Create(bitmap)); + enc.Save(bmp); + + if (imageInformation != null) + { + var aspectHeight = (int)Math.Floor(wb.PixelHeight * scaleRatio); + var aspectWidth = (int)Math.Floor(wb.PixelWidth * scaleRatio); + + imageInformation.SetOriginalSize(wb.PixelWidth, wb.PixelHeight); + imageInformation.SetCurrentSize(aspectWidth, aspectHeight); + } + bmp.Seek(0,SeekOrigin.Begin); + return bmp; + } + } +} diff --git a/source/FFImageLoading.Wpf/Extensions/TaskParameterPlatformExtensions.cs b/source/FFImageLoading.Wpf/Extensions/TaskParameterPlatformExtensions.cs new file mode 100644 index 000000000..cf9027856 --- /dev/null +++ b/source/FFImageLoading.Wpf/Extensions/TaskParameterPlatformExtensions.cs @@ -0,0 +1,131 @@ +using System; +using System.Threading.Tasks; +using FFImageLoading.Work; +using System.IO; +using System.Windows.Controls; +using System.Windows.Media.Imaging; +using FFImageLoading.Targets; +using FFImageLoading.Extensions; + +namespace FFImageLoading +{ + /// + /// TaskParameterPlatformExtensions + /// + public static class TaskParameterPlatformExtensions + { + /// + /// Loads the image into PNG Stream + /// + /// The PNG Stream async. + /// Parameters. + public static async Task AsPNGStreamAsync(this TaskParameter parameters) + { + var result = await AsWriteableBitmapAsync(parameters); + var stream = await result.AsPngStreamAsync(); + + return stream; + } + + /// + /// Loads the image into JPG Stream + /// + /// The JPG Stream async. + /// Parameters. + public static async Task AsJPGStreamAsync(this TaskParameter parameters, int quality = 80) + { + var result = await AsWriteableBitmapAsync(parameters); + var stream = await result.AsJpegStreamAsync(quality); + + return stream; + } + + /// + /// Loads the image into given Image using defined parameters. + /// + /// Parameters for loading the image. + /// Image view that should receive the image. + public static IScheduledWork Into(this TaskParameter parameters, Image imageView) + { + var target = new ImageTarget(imageView); + + if (parameters.Source != Work.ImageSource.Stream && string.IsNullOrWhiteSpace(parameters.Path)) + { + target.SetAsEmpty(null); + parameters.TryDispose(); + return null; + } + + var task = ImageService.CreateTask(parameters, target); + ImageService.Instance.LoadImage(task); + return task; + } + + /// + /// Loads the image into given Image using defined parameters. + /// IMPORTANT: It throws image loading exceptions - you should handle them + /// + /// An awaitable Task. + /// Parameters for loading the image. + /// Image view that should receive the image. + public static Task IntoAsync(this TaskParameter parameters, Image imageView) + { + var userErrorCallback = parameters.OnError; + var finishCallback = parameters.OnFinish; + var tcs = new TaskCompletionSource(); + + parameters + .Error(ex => + { + tcs.TrySetException(ex); + userErrorCallback?.Invoke(ex); + }) + .Finish(scheduledWork => + { + finishCallback?.Invoke(scheduledWork); + tcs.TrySetResult(scheduledWork); + }) + .Into(imageView); + + return tcs.Task; + } + + /// + /// Loads and gets WriteableBitmap using defined parameters. + /// IMPORTANT: It throws image loading exceptions - you should handle them + /// + /// The WriteableBitmap. + /// Parameters. + public static Task AsWriteableBitmapAsync(this TaskParameter parameters) + { + var target = new BitmapTarget(); + var userErrorCallback = parameters.OnError; + var finishCallback = parameters.OnFinish; + var tcs = new TaskCompletionSource(); + + parameters + .Error(ex => + { + tcs.TrySetException(ex); + userErrorCallback?.Invoke(ex); + }) + .Finish(scheduledWork => + { + finishCallback?.Invoke(scheduledWork); + tcs.TrySetResult(target.BitmapSource as WriteableBitmap); + }); + + if (parameters.Source != Work.ImageSource.Stream && string.IsNullOrWhiteSpace(parameters.Path)) + { + target.SetAsEmpty(null); + parameters.TryDispose(); + return null; + } + + var task = ImageService.CreateTask(parameters, target); + ImageService.Instance.LoadImage(task); + + return tcs.Task; + } + } +} diff --git a/source/FFImageLoading.Wpf/Extensions/UnitsExtensions.cs b/source/FFImageLoading.Wpf/Extensions/UnitsExtensions.cs new file mode 100644 index 000000000..ed3b8b447 --- /dev/null +++ b/source/FFImageLoading.Wpf/Extensions/UnitsExtensions.cs @@ -0,0 +1,15 @@ +using System; + +namespace FFImageLoading.Extensions +{ + public static class UnitsExtensions + { + public static int DpToPixels(this int dp) => ImageService.Instance.DpToPixels(dp); + + public static int DpToPixels(this double dp) => ImageService.Instance.DpToPixels(dp); + + public static double PixelsToDp(this int px) => ImageService.Instance.PixelsToDp(px); + + public static double PixelsToDp(this double px) => ImageService.Instance.PixelsToDp(px); + } +} diff --git a/source/FFImageLoading.Wpf/Extensions/WriteableBitmapExtensions.cs b/source/FFImageLoading.Wpf/Extensions/WriteableBitmapExtensions.cs new file mode 100644 index 000000000..548333585 --- /dev/null +++ b/source/FFImageLoading.Wpf/Extensions/WriteableBitmapExtensions.cs @@ -0,0 +1,47 @@ +using System; +using System.IO; +using System.Runtime.InteropServices.WindowsRuntime; +using System.Threading.Tasks; +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Extensions +{ + public static class WriteableBitmapExtensions + { + public static async Task AsPngStreamAsync(this WriteableBitmap bitmap) + { + Stream bmp = new MemoryStream(); + + BitmapEncoder enc = new PngBitmapEncoder(); + enc.Frames.Add(BitmapFrame.Create(bitmap)); + enc.Save(bmp); + + return bmp; + //using (var stream = bitmap.PixelBuffer.AsStream()) + //{ + // pixels = new byte[(uint)stream.Length]; + // await stream.ReadAsync(pixels, 0, pixels.Length); + //} + + //var raStream = new InMemoryRandomAccessStream(); + //// Encode pixels into stream + //var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, raStream); + //encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, (uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight, 96, 96, pixels); + //await encoder.FlushAsync(); + + //return raStream.AsStreamForRead(); + } + + public static async Task AsJpegStreamAsync(this WriteableBitmap bitmap, int quality = 90) + { + Stream bmp = new MemoryStream(); + + var enc = new JpegBitmapEncoder(); + enc.QualityLevel = quality; + enc.Frames.Add(BitmapFrame.Create(bitmap)); + enc.Save(bmp); + + return bmp; + } + } +} diff --git a/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj b/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj new file mode 100644 index 000000000..37fd48404 --- /dev/null +++ b/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj @@ -0,0 +1,95 @@ + + + + + Debug + AnyCPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E} + Library + Properties + FFImageLoading + FFImageLoading.Platform + v4.7.1 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + Latest + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + true + Latest + + + + + + + + + + + + + + + + + Extensions\TaskParameterExtensions.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {0ad3a755-399a-4527-a001-6192724c67bb} + FFImageLoading + + + + + + + + 1.6.2 + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Wpf/FFImageSourceBinding.cs b/source/FFImageLoading.Wpf/FFImageSourceBinding.cs new file mode 100644 index 000000000..fb7928db2 --- /dev/null +++ b/source/FFImageLoading.Wpf/FFImageSourceBinding.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace FFImageLoading +{ + public class FFImageSourceBinding + { + public FFImageSourceBinding(Work.ImageSource imageSource, string path) + { + ImageSource = imageSource; + Path = path; + } + + public Work.ImageSource ImageSource { get; private set; } + + public string Path { get; private set; } + + internal static async Task GetImageSourceBinding(string source) + { + if (string.IsNullOrWhiteSpace(source)) + { + return null; + } + + Uri uri; + if (!Uri.TryCreate(source, UriKind.Absolute, out uri) || uri.Scheme == "file") + { + var isFile = await Cache.FFSourceBindingCache.IsFileAsync(source); + if (isFile) + { + return new FFImageSourceBinding(Work.ImageSource.Filepath, source); + } + + return new FFImageSourceBinding(Work.ImageSource.CompiledResource, source); + } + + return new FFImageSourceBinding(Work.ImageSource.Url, source); + } + + public override bool Equals(object obj) + { + var item = obj as FFImageSourceBinding; + + if (item == null) + { + return false; + } + + return this.ImageSource.Equals(item.ImageSource) && this.Path.Equals(item.Path); + } + + public override int GetHashCode() + { + unchecked + { + int hash = 17; + hash = hash * 23 + this.ImageSource.GetHashCode(); + hash = hash * 23 + Path.GetHashCode(); + return hash; + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Helpers/ColorHolder.cs b/source/FFImageLoading.Wpf/Helpers/ColorHolder.cs new file mode 100644 index 000000000..8ac36432f --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/ColorHolder.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFImageLoading +{ + public struct ColorHolder + { + public ColorHolder(int a, int r, int g, int b) + { + A = Convert.ToByte(Math.Min(Math.Max(0, a), 255)); + + if (a > 0) + { + R = Convert.ToByte(Math.Min(Math.Max(0, r), 255)); + G = Convert.ToByte(Math.Min(Math.Max(0, g), 255)); + B = Convert.ToByte(Math.Min(Math.Max(0, b), 255)); + } + else + { + R = 0; + G = 0; + B = 0; + } + } + + public ColorHolder(int r, int g, int b) + { + A = 255; + R = Convert.ToByte(Math.Min(Math.Max(0, r), 255)); + G = Convert.ToByte(Math.Min(Math.Max(0, g), 255)); + B = Convert.ToByte(Math.Min(Math.Max(0, b), 255)); + } + + public readonly byte A; + + public readonly byte R; + + public readonly byte G; + + public readonly byte B; + + public static readonly ColorHolder Transparent = new ColorHolder(0, 0, 0, 0); + } +} diff --git a/source/FFImageLoading.Wpf/Helpers/MD5Helper.cs b/source/FFImageLoading.Wpf/Helpers/MD5Helper.cs new file mode 100644 index 000000000..356e9161c --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/MD5Helper.cs @@ -0,0 +1,50 @@ +using System; +using System.IO; +using System.Security.Cryptography; +using System.Text; + +namespace FFImageLoading.Helpers +{ + public class MD5Helper : IMD5Helper + { + public string MD5(Stream input) + { + using (var hashProvider = new MD5CryptoServiceProvider()) + { + var bytes = hashProvider.ComputeHash(input); + return BitConverter.ToString(bytes)?.ToSanitizedKey(); + } + } + + public string MD5(string input) + { + using (var hashProvider = new MD5CryptoServiceProvider()) + { + var bytes = hashProvider.ComputeHash(Encoding.UTF8.GetBytes(input)); + return BitConverter.ToString(bytes)?.ToSanitizedKey(); + } + + } + //public static byte[] StreamToByteArray(Stream stream) + //{ + // if (stream is MemoryStream) + // { + // return ((MemoryStream)stream).ToArray(); + // } + // else + // { + // return ReadFully(stream); + // } + //} + + //public static byte[] ReadFully(Stream input) + //{ + // using (MemoryStream ms = new MemoryStream()) + // { + // input.CopyTo(ms); + // return ms.ToArray(); + // } + //} + } +} + diff --git a/source/FFImageLoading.Wpf/Helpers/MainThreadDispatcher.cs b/source/FFImageLoading.Wpf/Helpers/MainThreadDispatcher.cs new file mode 100644 index 000000000..226c05c48 --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/MainThreadDispatcher.cs @@ -0,0 +1,87 @@ +using System; +using System.Threading.Tasks; +using System.Windows.Threading; + +namespace FFImageLoading.Helpers +{ + public class MainThreadDispatcher : IMainThreadDispatcher + { + private Dispatcher _dispatcher; + + public async void Post(Action action) + { + if (action == null) + return; + + if(_dispatcher == null) + { + _dispatcher = System.Windows.Application.Current.Dispatcher; + } + + // already in UI thread: + if (_dispatcher.CheckAccess()) + { + action(); + } + // not in UI thread, ensuring UI thread: + else + { + //var tcs = new TaskCompletionSource(); + //Post(() => + //{ + // try + // { + // action?.Invoke(); + // tcs.SetResult(true); + // } + // catch (Exception ex) + // { + // tcs.SetException(ex); + // } + //}); + + //await tcs.Task; + await _dispatcher.InvokeAsync(() => action()); + //await CoreApplication.GetCurrentView().Dispatcher.RunAsync(CoreDispatcherPriority.Low, () => action()); + } + } + + public Task PostAsync(Action action) + { + var tcs = new TaskCompletionSource(); + Post(() => + { + try + { + action?.Invoke(); + tcs.SetResult(true); + } + catch (Exception ex) + { + tcs.SetException(ex); + } + }); + + return tcs.Task; + } + + public Task PostAsync(Func action) + { + var tcs = new TaskCompletionSource(); + Post(async () => + { + try + { + await action?.Invoke(); + tcs.SetResult(true); + } + catch (Exception ex) + { + tcs.SetException(ex); + } + }); + + return tcs.Task; + } + } +} diff --git a/source/FFImageLoading.Wpf/Helpers/MiniLogger.cs b/source/FFImageLoading.Wpf/Helpers/MiniLogger.cs new file mode 100644 index 000000000..94d25efe3 --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/MiniLogger.cs @@ -0,0 +1,30 @@ +using System; +using System.Diagnostics; + +namespace FFImageLoading.Helpers +{ + internal class MiniLogger : IMiniLogger + { + public void Debug(string message) + { + DebugInternal(message); + } + + public void Error(string errorMessage) + { + System.Diagnostics.Debug.WriteLine(errorMessage); + } + + public void Error(string errorMessage, Exception ex) + { + System.Diagnostics.Debug.WriteLine(errorMessage + Environment.NewLine + ex.ToString()); + } + + [Conditional("DEBUG")] + private void DebugInternal(string message) + { + System.Diagnostics.Debug.WriteLine(message); + } + } +} + diff --git a/source/FFImageLoading.Wpf/Helpers/PlatformPerformance.cs b/source/FFImageLoading.Wpf/Helpers/PlatformPerformance.cs new file mode 100644 index 000000000..9e57392be --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/PlatformPerformance.cs @@ -0,0 +1,27 @@ +using System; + +namespace FFImageLoading +{ + public class PlatformPerformance : IPlatformPerformance + { + public PlatformPerformance() + { + } + + public int GetCurrentManagedThreadId() + { + return 0; + } + + public int GetCurrentSystemThreadId() + { + return 0; + } + + public string GetMemoryInfo() + { + return "[PERFORMANCE] Memory - not implemented"; + } + } +} + diff --git a/source/FFImageLoading.Wpf/Helpers/ScaleHelper.cs b/source/FFImageLoading.Wpf/Helpers/ScaleHelper.cs new file mode 100644 index 000000000..1ad83e647 --- /dev/null +++ b/source/FFImageLoading.Wpf/Helpers/ScaleHelper.cs @@ -0,0 +1,50 @@ +using System; +using System.Reflection; +using System.Threading; +using System.Threading.Tasks; + +namespace FFImageLoading.Helpers +{ + public static class ScaleHelper + { + static double? _scale; + public static double Scale + { + get + { + if (!_scale.HasValue) + { + InitAsync().ConfigureAwait(false).GetAwaiter().GetResult(); + } + + return _scale.Value; + } + } + + public static async Task InitAsync() + { + if (_scale.HasValue) + return; + + var dispatcher = ImageService.Instance.Config.MainThreadDispatcher; + + await dispatcher.PostAsync(() => + { + //var displayInfo = DisplayInformation.GetForCurrentView(); + object found = null; + + //todo + //try + //{ + // found = displayInfo.GetType().GetRuntimeProperty("RawPixelsPerViewPixel")?.GetValue(displayInfo); + //} + //catch (Exception) + //{ + //} + + _scale = found == null ? 1d : (double)found; + }).ConfigureAwait(false); + } + } +} + diff --git a/source/FFImageLoading.Wpf/ImageService.cs b/source/FFImageLoading.Wpf/ImageService.cs new file mode 100644 index 000000000..3fed3b8b2 --- /dev/null +++ b/source/FFImageLoading.Wpf/ImageService.cs @@ -0,0 +1,141 @@ +using System; +using System.IO; +using FFImageLoading.Config; +using FFImageLoading.Cache; +using FFImageLoading.Helpers; +using FFImageLoading.Work; +using FFImageLoading.DataResolvers; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Windows.Controls; +using System.Windows.Media.Imaging; + +namespace FFImageLoading +{ + /// + /// FFImageLoading by Daniel Luberda + /// + //[Preserve(AllMembers = true)] + public class ImageService : ImageServiceBase + { + static ConditionalWeakTable _viewsReferences = new ConditionalWeakTable(); + static IImageService _instance; + + /// + /// FFImageLoading instance. + /// + /// The instance. + public static IImageService Instance + { + get + { + if (_instance == null) + _instance = new ImageService(); + + return _instance; + } + } + + protected override void PlatformSpecificConfiguration(Config.Configuration configuration) + { + base.PlatformSpecificConfiguration(configuration); + + configuration.ClearMemoryCacheOnOutOfMemory = false; + configuration.ExecuteCallbacksOnUIThread = true; + } + + protected override IMemoryCache MemoryCache => ImageCache.Instance; + protected override IMD5Helper CreatePlatformMD5HelperInstance(Configuration configuration) => new MD5Helper(); + protected override IMiniLogger CreatePlatformLoggerInstance(Configuration configuration) => new MiniLogger(); + protected override IPlatformPerformance CreatePlatformPerformanceInstance(Configuration configuration) => new PlatformPerformance(); + protected override IMainThreadDispatcher CreateMainThreadDispatcherInstance(Configuration configuration) => new MainThreadDispatcher(); + protected override IDataResolverFactory CreateDataResolverFactoryInstance(Configuration configuration) => new DataResolverFactory(); + + protected override IDiskCache CreatePlatformDiskCacheInstance(Configuration configuration) + { + if (string.IsNullOrWhiteSpace(configuration.DiskCachePath)) + { + var data = Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData); + //todo include app name + var cachePath = Path.Combine(data, "FFSimpleDiskCache"); + + configuration.DiskCachePath = cachePath; + } + + if (!Directory.Exists(configuration.DiskCachePath)) + { + Directory.CreateDirectory(configuration.DiskCachePath); + } + + return new SimpleDiskCache(configuration.DiskCachePath, configuration); + } + + internal static IImageLoaderTask CreateTask(TaskParameter parameters, ITarget target) where TImageView : class + { + return new PlatformImageLoaderTask(target, parameters, Instance); + } + + internal static IImageLoaderTask CreateTask(TaskParameter parameters) + { + return new PlatformImageLoaderTask(null, parameters, Instance); + } + + protected override void SetTaskForTarget(IImageLoaderTask currentTask) + { + var targetView = currentTask?.Target?.TargetControl; + + if (!(targetView is Image)) + return; + + lock (_viewsReferences) + { + if (_viewsReferences.TryGetValue(targetView, out var existingTask)) + { + try + { + if (existingTask != null && !existingTask.IsCancelled && !existingTask.IsCompleted) + { + existingTask.Cancel(); + } + } + catch (ObjectDisposedException) { } + + _viewsReferences.Remove(targetView); + } + + _viewsReferences.Add(targetView, currentTask); + } + } + + public override void CancelWorkForView(object view) + { + lock (_viewsReferences) + { + if (_viewsReferences.TryGetValue(view, out var existingTask)) + { + try + { + if (existingTask != null && !existingTask.IsCancelled && !existingTask.IsCompleted) + { + existingTask.Cancel(); + } + } + catch (ObjectDisposedException) { } + } + } + } + + public override int DpToPixels(double dp) + { + return (int)Math.Floor(dp * ScaleHelper.Scale); + } + + public override double PixelsToDp(double px) + { + if (Math.Abs(px) < double.Epsilon) + return 0d; + + return Math.Floor(px / ScaleHelper.Scale); + } + } +} diff --git a/source/FFImageLoading.Wpf/Properties/AssemblyInfo.cs b/source/FFImageLoading.Wpf/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..56a5a497f --- /dev/null +++ b/source/FFImageLoading.Wpf/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FFImageLoading.Wpf")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FFImageLoading.Wpf")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("dc06c582-6c7e-4018-a752-feb528c65f7e")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/FFImageLoading.Wpf/Targets/BitmapTarget.cs b/source/FFImageLoading.Wpf/Targets/BitmapTarget.cs new file mode 100644 index 000000000..6f8a7c1d1 --- /dev/null +++ b/source/FFImageLoading.Wpf/Targets/BitmapTarget.cs @@ -0,0 +1,35 @@ +using System; +using System.Windows.Media.Imaging; +using FFImageLoading.Work; + +namespace FFImageLoading.Targets +{ + public class BitmapTarget: Target + { + private WeakReference _imageWeakReference = null; + + public override void Set(IImageLoaderTask task, BitmapSource image, bool animated) + { + if (task == null || task.IsCancelled) + return; + + if (_imageWeakReference == null) + _imageWeakReference = new WeakReference(image); + else + _imageWeakReference.SetTarget(image); + } + + public BitmapSource BitmapSource + { + get + { + if (_imageWeakReference == null) + return null; + + BitmapSource image = null; + _imageWeakReference.TryGetTarget(out image); + return image; + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Targets/ImageTarget.cs b/source/FFImageLoading.Wpf/Targets/ImageTarget.cs new file mode 100644 index 000000000..63914eece --- /dev/null +++ b/source/FFImageLoading.Wpf/Targets/ImageTarget.cs @@ -0,0 +1,106 @@ +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media.Animation; +using System.Windows.Media.Imaging; +using FFImageLoading.Work; + +namespace FFImageLoading.Targets +{ + public class ImageTarget : Target + { + private readonly WeakReference _controlWeakReference; + + public ImageTarget(Image control) + { + _controlWeakReference = new WeakReference(control); + } + + public override bool IsValid + { + get + { + return Control != null; + } + } + + public override void SetAsEmpty(IImageLoaderTask task) + { + var control = Control; + if (control == null) + return; + + control.Source = null; + } + + public override void Set(IImageLoaderTask task, BitmapSource image, bool animated) + { + if (task.IsCancelled) + return; + + var control = Control; + if (control == null || control.Source == image) + return; + + var parameters = task.Parameters; + + if (animated) + { + // fade animation + int fadeDuration = parameters.FadeAnimationDuration.HasValue ? + parameters.FadeAnimationDuration.Value : ImageService.Instance.Config.FadeAnimationDuration; + DoubleAnimation fade = new DoubleAnimation(); + fade.Duration = TimeSpan.FromMilliseconds(fadeDuration); + fade.From = 0f; + fade.To = 1f; + fade.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseInOut }; + + Storyboard fadeInStoryboard = new Storyboard(); + //todo + Storyboard.SetTargetProperty(fade, new PropertyPath("Opacity")); + Storyboard.SetTarget(fade, control); + fadeInStoryboard.Children.Add(fade); + fadeInStoryboard.Begin(); + control.Source = image; + if (IsLayoutNeeded(task)) + control.UpdateLayout(); + } + else + { + control.Source = image; + if (IsLayoutNeeded(task)) + control.UpdateLayout(); + } + } + + bool IsLayoutNeeded(IImageLoaderTask task) + { + if (task.Parameters.InvalidateLayoutEnabled.HasValue) + { + if (!task.Parameters.InvalidateLayoutEnabled.Value) + return false; + } + else if (!task.Configuration.InvalidateLayout) + { + return false; + } + + return true; + } + + public override Image Control + { + get + { + Image control; + if (!_controlWeakReference.TryGetTarget(out control)) + return null; + + if (control == null) + return null; + + return control; + } + } + } +} diff --git a/source/FFImageLoading.Wpf/Transformations/TransformationBase.cs b/source/FFImageLoading.Wpf/Transformations/TransformationBase.cs new file mode 100644 index 000000000..6560046e2 --- /dev/null +++ b/source/FFImageLoading.Wpf/Transformations/TransformationBase.cs @@ -0,0 +1,21 @@ +using System; +using FFImageLoading.Work; + +namespace FFImageLoading.Transformations +{ + public abstract class TransformationBase : ITransformation + { + public abstract string Key { get; } + + public IBitmap Transform(IBitmap bitmapHolder, string path, ImageSource source, bool isPlaceholder, string key) + { + var nativeHolder = bitmapHolder.ToNative(); + return Transform(nativeHolder, path, source, isPlaceholder, key); + } + + protected virtual BitmapHolder Transform(BitmapHolder bitmapHolder, string path, ImageSource source, bool isPlaceholder, string key) + { + return bitmapHolder; + } + } +} diff --git a/source/FFImageLoading.Wpf/Work/BitmapHolder.cs b/source/FFImageLoading.Wpf/Work/BitmapHolder.cs new file mode 100644 index 000000000..feb07867d --- /dev/null +++ b/source/FFImageLoading.Wpf/Work/BitmapHolder.cs @@ -0,0 +1,87 @@ +using FFImageLoading.Extensions; +using FFImageLoading.Helpers; +using System; +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Work +{ + public class BitmapHolder : IBitmap + { + public BitmapHolder(WriteableBitmap bitmap) + { + WriteableBitmap = bitmap; + } + + public BitmapHolder(byte[] pixels, int width, int height) + { + PixelData = pixels; + Width = width; + Height = height; + } + + public bool HasWriteableBitmap => WriteableBitmap != null; + + public WriteableBitmap WriteableBitmap { get; private set; } + + public int Height { get; private set; } + + public int Width { get; private set; } + + public byte[] PixelData { get; private set; } + + public int PixelCount { get { return (int)(PixelData.Length / 4); } } + + public void SetPixel(int x, int y, ColorHolder color) + { + int pixelPos = (y * Width + x); + SetPixel(pixelPos, color); + } + + public void SetPixel(int pos, ColorHolder color) + { + try + { + int bytePos = pos * 4; + PixelData[bytePos] = color.B; + PixelData[bytePos + 1] = color.G; + PixelData[bytePos + 2] = color.R; + PixelData[bytePos + 3] = color.A; + } + catch (Exception ex) + { + throw; + } + } + + public ColorHolder GetPixel(int pos) + { + int bytePos = pos * 4; + var b = PixelData[bytePos]; + var g = PixelData[bytePos + 1]; + var r = PixelData[bytePos + 2]; + var a = PixelData[bytePos + 3]; + + return new ColorHolder(a, r, g, b); + } + + public ColorHolder GetPixel(int x, int y) + { + int pixelPos = (y * Width + x); + return GetPixel(pixelPos); + } + + public void FreePixels() + { + PixelData = null; + WriteableBitmap = null; + } + } + + public static class IBitmapExtensions + { + public static BitmapHolder ToNative(this IBitmap bitmap) + { + return (BitmapHolder)bitmap; + } + } +} diff --git a/source/FFImageLoading.Wpf/Work/PlatformImageLoaderTask.cs b/source/FFImageLoading.Wpf/Work/PlatformImageLoaderTask.cs new file mode 100644 index 000000000..244d08220 --- /dev/null +++ b/source/FFImageLoading.Wpf/Work/PlatformImageLoaderTask.cs @@ -0,0 +1,122 @@ +using FFImageLoading.Cache; +using FFImageLoading.Config; +using FFImageLoading.Extensions; +using FFImageLoading.Helpers; +using System; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using FFImageLoading.Decoders; +using System.Collections.Generic; +using System.Windows.Media.Imaging; + +namespace FFImageLoading.Work +{ + public class PlatformImageLoaderTask : ImageLoaderTask where TImageView : class + { + static readonly SemaphoreSlim _decodingLock = new SemaphoreSlim(1, 1); + + public PlatformImageLoaderTask(ITarget target, TaskParameter parameters, IImageService imageService) : base(ImageCache.Instance, target, parameters, imageService) + { + } + + public async override Task Init() + { + await ScaleHelper.InitAsync(); + await base.Init(); + } + + protected override Task SetTargetAsync(BitmapSource image, bool animated) + { + if (Target == null) + return Task.FromResult(true); + + return MainThreadDispatcher.PostAsync(() => + { + ThrowIfCancellationRequested(); + PlatformTarget.Set(this, image, animated); + }); + } + + protected override int DpiToPixels(int size) + { + return size.DpToPixels(); + } + + protected override IDecoder ResolveDecoder(ImageInformation.ImageType type) + { + switch (type) + { + case ImageInformation.ImageType.WEBP: + throw new NotImplementedException(); + default: + return new BaseDecoder(); + } + } + + protected override async Task TransformAsync(BitmapHolder bitmap, IList transformations, string path, ImageSource source, bool isPlaceholder) + { + await _decodingLock.WaitAsync(CancellationTokenSource.Token).ConfigureAwait(false); // Applying transformations is both CPU and memory intensive + ThrowIfCancellationRequested(); + + try + { + foreach (var transformation in transformations) + { + ThrowIfCancellationRequested(); + + var old = bitmap; + + try + { + IBitmap bitmapHolder = transformation.Transform(bitmap, path, source, isPlaceholder, Key); + bitmap = bitmapHolder.ToNative(); + } + catch (Exception ex) + { + Logger.Error(string.Format("Transformation failed: {0}", transformation.Key), ex); + throw; + } + finally + { + if (old != null && old != bitmap && old.PixelData != bitmap.PixelData) + { + old.FreePixels(); + old = null; + } + } + } + } + finally + { + _decodingLock.Release(); + } + + return bitmap; + } + + protected override async Task GenerateImageFromDecoderContainerAsync(IDecodedImage decoded, ImageInformation imageInformation, bool isPlaceholder) + { + if (decoded.IsAnimated) + { + throw new NotImplementedException(); + } + else + { + try + { + if (decoded.Image.HasWriteableBitmap) + return decoded.Image.WriteableBitmap; + + return await decoded.Image.ToBitmapImageAsync(); + } + finally + { + decoded.Image.FreePixels(); + decoded.Image = null; + } + } + } + } +} From d26b863dccf63bf21d1e1a7694f5e99ed8a48228 Mon Sep 17 00:00:00 2001 From: evlentev Date: Fri, 19 Apr 2019 11:45:32 +0300 Subject: [PATCH 03/15] rebase --- .../CachedImageRenderer.cs | 16 +- .../FFImageLoading.Forms.Wpf.csproj | 1 + source/FFImageLoading.Wpf/Cache/ImageCache.cs | 6 +- .../TaskParameterPlatformExtensions.cs | 267 ++++++++++-------- .../FFImageLoading.Wpf.csproj | 1 + source/FFImageLoading.Wpf/ImageService.cs | 10 +- 6 files changed, 167 insertions(+), 134 deletions(-) diff --git a/source/FFImageLoading.Forms.Wpf/CachedImageRenderer.cs b/source/FFImageLoading.Forms.Wpf/CachedImageRenderer.cs index a4c1384d3..0c3e66f37 100644 --- a/source/FFImageLoading.Forms.Wpf/CachedImageRenderer.cs +++ b/source/FFImageLoading.Forms.Wpf/CachedImageRenderer.cs @@ -19,7 +19,7 @@ namespace FFImageLoading.Forms.Platform /// /// CachedImage Implementation /// - //[Preserve(AllMembers = true)] + [Preserve(AllMembers = true)] public class CachedImageRenderer : ViewRenderer { [RenderWith(typeof(CachedImageRenderer))] @@ -212,11 +212,11 @@ static Stretch GetStretch(Aspect aspect) async void ImageLoadingSizeChanged(CachedImage element, bool isLoading) { - await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(() => - { - if (element != null && !_isDisposed) - { - if (!isLoading || !_isSizeSet) + if (element != null && !_isDisposed) + { + await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(() => + { + if (!isLoading || !_isSizeSet) { ((IVisualElementController)element)?.InvalidateMeasure(Xamarin.Forms.Internals.InvalidationTrigger.RendererReady); _isSizeSet = true; @@ -224,8 +224,8 @@ await ImageService.Instance.Config.MainThreadDispatcher.PostAsync(() => if (!isLoading) element.SetIsLoading(isLoading); - } - }); + }); + } } void ReloadImage() diff --git a/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj b/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj index 8a03b2a45..99c24776c 100644 --- a/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj +++ b/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj @@ -35,6 +35,7 @@ + diff --git a/source/FFImageLoading.Wpf/Cache/ImageCache.cs b/source/FFImageLoading.Wpf/Cache/ImageCache.cs index 50d2ff9f0..a7fc212f7 100644 --- a/source/FFImageLoading.Wpf/Cache/ImageCache.cs +++ b/source/FFImageLoading.Wpf/Cache/ImageCache.cs @@ -76,11 +76,7 @@ public Tuple Get(string key) public void Clear() { _reusableBitmaps.Clear(); - - // Force immediate Garbage collection. Please note that is resource intensive. - GC.Collect(); - GC.WaitForPendingFinalizers(); - GC.WaitForPendingFinalizers(); + GC.Collect(); } diff --git a/source/FFImageLoading.Wpf/Extensions/TaskParameterPlatformExtensions.cs b/source/FFImageLoading.Wpf/Extensions/TaskParameterPlatformExtensions.cs index cf9027856..b9629c458 100644 --- a/source/FFImageLoading.Wpf/Extensions/TaskParameterPlatformExtensions.cs +++ b/source/FFImageLoading.Wpf/Extensions/TaskParameterPlatformExtensions.cs @@ -6,126 +6,155 @@ using System.Windows.Media.Imaging; using FFImageLoading.Targets; using FFImageLoading.Extensions; +using ImageSource = FFImageLoading.Work.ImageSource; namespace FFImageLoading { - /// - /// TaskParameterPlatformExtensions - /// - public static class TaskParameterPlatformExtensions - { - /// - /// Loads the image into PNG Stream - /// - /// The PNG Stream async. - /// Parameters. - public static async Task AsPNGStreamAsync(this TaskParameter parameters) - { - var result = await AsWriteableBitmapAsync(parameters); - var stream = await result.AsPngStreamAsync(); - - return stream; - } - - /// - /// Loads the image into JPG Stream - /// - /// The JPG Stream async. - /// Parameters. - public static async Task AsJPGStreamAsync(this TaskParameter parameters, int quality = 80) - { - var result = await AsWriteableBitmapAsync(parameters); - var stream = await result.AsJpegStreamAsync(quality); - - return stream; - } - - /// - /// Loads the image into given Image using defined parameters. - /// - /// Parameters for loading the image. - /// Image view that should receive the image. - public static IScheduledWork Into(this TaskParameter parameters, Image imageView) - { - var target = new ImageTarget(imageView); - - if (parameters.Source != Work.ImageSource.Stream && string.IsNullOrWhiteSpace(parameters.Path)) - { - target.SetAsEmpty(null); - parameters.TryDispose(); - return null; - } - - var task = ImageService.CreateTask(parameters, target); - ImageService.Instance.LoadImage(task); - return task; - } - - /// - /// Loads the image into given Image using defined parameters. - /// IMPORTANT: It throws image loading exceptions - you should handle them - /// - /// An awaitable Task. - /// Parameters for loading the image. - /// Image view that should receive the image. - public static Task IntoAsync(this TaskParameter parameters, Image imageView) - { - var userErrorCallback = parameters.OnError; - var finishCallback = parameters.OnFinish; - var tcs = new TaskCompletionSource(); - - parameters - .Error(ex => - { - tcs.TrySetException(ex); - userErrorCallback?.Invoke(ex); - }) - .Finish(scheduledWork => - { - finishCallback?.Invoke(scheduledWork); - tcs.TrySetResult(scheduledWork); - }) - .Into(imageView); - - return tcs.Task; - } - - /// - /// Loads and gets WriteableBitmap using defined parameters. - /// IMPORTANT: It throws image loading exceptions - you should handle them - /// - /// The WriteableBitmap. - /// Parameters. - public static Task AsWriteableBitmapAsync(this TaskParameter parameters) - { - var target = new BitmapTarget(); - var userErrorCallback = parameters.OnError; - var finishCallback = parameters.OnFinish; - var tcs = new TaskCompletionSource(); - - parameters - .Error(ex => - { - tcs.TrySetException(ex); - userErrorCallback?.Invoke(ex); - }) - .Finish(scheduledWork => - { - finishCallback?.Invoke(scheduledWork); - tcs.TrySetResult(target.BitmapSource as WriteableBitmap); - }); - - if (parameters.Source != Work.ImageSource.Stream && string.IsNullOrWhiteSpace(parameters.Path)) - { - target.SetAsEmpty(null); - parameters.TryDispose(); - return null; - } - - var task = ImageService.CreateTask(parameters, target); - ImageService.Instance.LoadImage(task); - - return tcs.Task; - } - } + /// + /// TaskParameterPlatformExtensions + /// + public static class TaskParameterPlatformExtensions + { + /// + /// Loads the image into PNG Stream + /// + /// The PNG Stream async. + /// Parameters. + public static async Task AsPNGStreamAsync(this TaskParameter parameters) + { + var result = await AsWriteableBitmapAsync(parameters); + var stream = await result.AsPngStreamAsync(); + + return stream; + } + + /// + /// Loads the image into JPG Stream + /// + /// The JPG Stream async. + /// Parameters. + public static async Task AsJPGStreamAsync(this TaskParameter parameters, int quality = 80) + { + var result = await AsWriteableBitmapAsync(parameters); + var stream = await result.AsJpegStreamAsync(quality); + + return stream; + } + + /// + /// Loads and gets WriteableBitmap using defined parameters. + /// IMPORTANT: It throws image loading exceptions - you should handle them + /// + /// The WriteableBitmap. + /// Parameters. + public static Task AsWriteableBitmapAsync(this TaskParameter parameters) + { + var target = new BitmapTarget(); + var userErrorCallback = parameters.OnError; + var finishCallback = parameters.OnFinish; + var tcs = new TaskCompletionSource(); + + parameters + .Error(ex => + { + tcs.TrySetException(ex); + userErrorCallback?.Invoke(ex); + }) + .Finish(scheduledWork => + { + finishCallback?.Invoke(scheduledWork); + tcs.TrySetResult(target.BitmapSource as WriteableBitmap); + }); + + if (parameters.Source != Work.ImageSource.Stream && string.IsNullOrWhiteSpace(parameters.Path)) + { + target.SetAsEmpty(null); + parameters.TryDispose(); + return null; + } + + var task = ImageService.CreateTask(parameters, target); + ImageService.Instance.LoadImage(task); + + return tcs.Task; + } + + /// + /// Loads the image into given Image using defined parameters. + /// + /// Parameters for loading the image. + /// Image view that should receive the image. + public static IScheduledWork Into(this TaskParameter parameters, Image imageView) + { + var target = new ImageTarget(imageView); + return parameters.Into(target); + } + + /// + /// Loads the image into given Image using defined parameters. + /// IMPORTANT: It throws image loading exceptions - you should handle them + /// + /// An awaitable Task. + /// Parameters for loading the image. + /// Image view that should receive the image. + public static Task IntoAsync(this TaskParameter parameters, Image imageView) + { + return parameters.IntoAsync(param => param.Into(imageView)); + } + + /// + /// Loads the image into given target using defined parameters. + /// + /// The into. + /// Parameters. + /// Target. + /// The 1st type parameter. + public static IScheduledWork Into(this TaskParameter parameters, ITarget target) where TImageView : class + { + if (parameters.Source != ImageSource.Stream && string.IsNullOrWhiteSpace(parameters.Path)) + { + target.SetAsEmpty(null); + parameters.TryDispose(); + return null; + } + + var task = ImageService.CreateTask(parameters, target); + ImageService.Instance.LoadImage(task); + return task; + } + + /// + /// Loads the image into given target using defined parameters. + /// IMPORTANT: It throws image loading exceptions - you should handle them + /// + /// The async. + /// Parameters. + /// Target. + /// The 1st type parameter. + public static Task IntoAsync(this TaskParameter parameters, ITarget target) where TImageView : class + { + return parameters.IntoAsync(param => param.Into(target)); + } + + private static Task IntoAsync(this TaskParameter parameters, Action into) + { + var userErrorCallback = parameters.OnError; + var finishCallback = parameters.OnFinish; + var tcs = new TaskCompletionSource(); + + parameters + .Error(ex => { + tcs.TrySetException(ex); + userErrorCallback?.Invoke(ex); + }) + .Finish(scheduledWork => { + finishCallback?.Invoke(scheduledWork); + tcs.TrySetResult(scheduledWork); + }); + + into(parameters); + + return tcs.Task; + } + } } diff --git a/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj b/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj index 37fd48404..6f9969225 100644 --- a/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj +++ b/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj @@ -39,6 +39,7 @@ + diff --git a/source/FFImageLoading.Wpf/ImageService.cs b/source/FFImageLoading.Wpf/ImageService.cs index 3fed3b8b2..39725f50d 100644 --- a/source/FFImageLoading.Wpf/ImageService.cs +++ b/source/FFImageLoading.Wpf/ImageService.cs @@ -34,9 +34,15 @@ public static IImageService Instance return _instance; } - } + } + + /// + /// Set this to use FFImageLoading in a unit test environment. + /// Instead throwing DoNotReference exception - use Mock implementation + /// + public static bool EnableMockImageService { get; set; } - protected override void PlatformSpecificConfiguration(Config.Configuration configuration) + protected override void PlatformSpecificConfiguration(Config.Configuration configuration) { base.PlatformSpecificConfiguration(configuration); From e1a9f1d264a80942558f8a03f6fa56f9e79db750 Mon Sep 17 00:00:00 2001 From: evlentev Date: Fri, 19 Apr 2019 11:45:40 +0300 Subject: [PATCH 04/15] cleanup --- .../Cache/FFSourceBindingCache.cs | 53 --- .../Cache/SimpleDiskCache.cs | 343 ------------------ .../FFImageSourceBinding.cs | 64 ---- .../FFImageLoading.Wpf/Targets/ImageTarget.cs | 1 - 4 files changed, 461 deletions(-) delete mode 100644 source/FFImageLoading.Wpf/Cache/FFSourceBindingCache.cs delete mode 100644 source/FFImageLoading.Wpf/Cache/SimpleDiskCache.cs delete mode 100644 source/FFImageLoading.Wpf/FFImageSourceBinding.cs diff --git a/source/FFImageLoading.Wpf/Cache/FFSourceBindingCache.cs b/source/FFImageLoading.Wpf/Cache/FFSourceBindingCache.cs deleted file mode 100644 index c12b1f3b1..000000000 --- a/source/FFImageLoading.Wpf/Cache/FFSourceBindingCache.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading.Tasks; - -namespace FFImageLoading.Cache -{ - /// - /// This class optimizes the call to "StorageFile.GetFileFromPathAsync" that is time consuming. - /// The source of each image is the key of the cache... once a source has been checked the first time, any other control can be skipped - /// - public static class FFSourceBindingCache - { - private static Dictionary> _cache = new Dictionary>(128); - - public static async Task IsFileAsync(string path) - { - - if (_cache.ContainsKey(path)) - { - return _cache[path].Item1; - } - else - { - if (_cache.Count >= 128) - { - _cache.Clear(); - } - - StorageFile file = await GetFileAsync(path); - _cache.Add(path, new Tuple(file != null, file)); - return file != null; - } - } - - public static async Task GetFileAsync(string path) - { - StorageFile file = null; - try - { - var filePath = System.IO.Path.GetDirectoryName(path); - if (!string.IsNullOrWhiteSpace(filePath) && !(filePath.TrimStart('\\', '/')).StartsWith("Assets")) - { - file = await StorageFile.GetFileFromPathAsync(path); - } - } - catch (Exception) - { - } - - return file; - } - } -} diff --git a/source/FFImageLoading.Wpf/Cache/SimpleDiskCache.cs b/source/FFImageLoading.Wpf/Cache/SimpleDiskCache.cs deleted file mode 100644 index 474562d04..000000000 --- a/source/FFImageLoading.Wpf/Cache/SimpleDiskCache.cs +++ /dev/null @@ -1,343 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Text; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using System.Collections.Generic; -using System.IO; -using System.IO.IsolatedStorage; -using FFImageLoading.Cache; -using FFImageLoading.Config; -using FFImageLoading.Helpers; - - -namespace FFImageLoading.Cache -{ - public class SimpleDiskCache : IDiskCache - { - readonly SemaphoreSlim fileWriteLock = new SemaphoreSlim(1, 1); - readonly SemaphoreSlim _currentWriteLock = new SemaphoreSlim(1, 1); - Task initTask = null; - string cacheFolderName; - IsolatedStorageFile rootFolder; - IsolatedStorageFile cacheFolder; - ConcurrentDictionary fileWritePendingTasks = new ConcurrentDictionary(); - ConcurrentDictionary entries = new ConcurrentDictionary(); - Task _currentWrite = Task.FromResult(1); - - /// - /// Initializes a new instance of the class. This constructor attempts - /// to create a folder of the given name under the . - /// - /// The name of the cache folder. - /// The configuration object. - public SimpleDiskCache(string cacheFolderName, Configuration configuration) - { - Configuration = configuration; - this.cacheFolderName = cacheFolderName; - initTask = Init(); - } - - /// - /// Initializes a new instance of the class. This constructor attempts - /// to create a folder of the given name under the given root . - /// - /// The root folder where the cache folder will be created. - /// The cache folder name. - /// The configuration object. - public SimpleDiskCache(IsolatedStorageFile rootFolder, string cacheFolderName, Configuration configuration) - { - Configuration = configuration; - this.rootFolder = rootFolder ?? IsolatedStorageFile.GetUserStoreForApplication(); - this.cacheFolderName = cacheFolderName; - initTask = Init(); - } - - protected Configuration Configuration { get; private set; } - protected IMiniLogger Logger { get { return Configuration.Logger; } } - - protected virtual async Task Init() - { - try - { - CreateCacheDirIfNotExists(); - await InitializeEntries().ConfigureAwait(false); - } - catch - { - rootFolder.DeleteDirectory(cacheFolderName); - CreateCacheDirIfNotExists(); - } - finally - { - var task = CleanCallback(); - } - } - - private void CreateCacheDirIfNotExists() - { - if (!rootFolder.DirectoryExists(cacheFolderName)) - rootFolder.CreateDirectory(cacheFolderName); - } - - protected virtual async Task InitializeEntries() - { - foreach (var file in GetAllEntries()) - { - var name = Path.GetFileName(file); - var key = Path.GetFileNameWithoutExtension(file); - var ext = Path.GetExtension(file); - var duration = GetDuration(ext); - var created = rootFolder.GetCreationTime(file); - entries.TryAdd(key, new CacheEntry(created.UtcDateTime, duration, name)); - } - } - - protected virtual TimeSpan GetDuration(string text) - { - string textToParse = text.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(); - if (string.IsNullOrWhiteSpace(textToParse)) - return Configuration.DiskCacheDuration; - - int duration; - return int.TryParse(textToParse, out duration) ? TimeSpan.FromSeconds(duration) : Configuration.DiskCacheDuration; - } - - protected virtual async Task CleanCallback() - { - var now = DateTime.UtcNow; - var kvps = entries.Where(kvp => kvp.Value.Origin + kvp.Value.TimeToLive < now).ToArray(); - - foreach (var kvp in kvps) - { - if (entries.TryRemove(kvp.Key, out var oldCacheEntry)) - { - try - { - Logger.Debug(string.Format("SimpleDiskCache: Removing expired file {0}", kvp.Key)); - rootFolder.DeleteFile(GetCacheFileName(oldCacheEntry.FileName)); - } - catch - { - } - } - } - } - - /// - /// GetFilePath - /// - /// - /// - public virtual async Task GetFilePathAsync(string key) - { - await initTask.ConfigureAwait(false); - - CacheEntry entry; - if (!entries.TryGetValue(key, out entry)) - return null; - - return Path.Combine(rootFolder.ToString(), GetCacheFileName(entry.FileName)); - } - - /// - /// Checks if cache entry exists/ - /// - /// The async. - /// Key. - public virtual async Task ExistsAsync(string key) - { - await initTask.ConfigureAwait(false); - - return entries.ContainsKey(key); - } - - /// - /// Adds the file to cache and file saving queue if not exists. - /// - /// Key. - /// Bytes. - /// Duration. - public virtual async Task AddToSavingQueueIfNotExistsAsync(string key, byte[] bytes, TimeSpan duration, Action writeFinished = null) - { - await initTask.ConfigureAwait(false); - - if (!fileWritePendingTasks.TryAdd(key, 1)) - return; - - await _currentWriteLock.WaitAsync().ConfigureAwait(false); // Make sure we don't add multiple continuations to the same task - - try - { - _currentWrite = _currentWrite.ContinueWith(async t => - { - await Task.Yield(); // forces it to be scheduled for later - - await initTask.ConfigureAwait(false); - - try - { - await fileWriteLock.WaitAsync().ConfigureAwait(false); - - CreateCacheDirIfNotExists(); - string filename = key + "." + (long)duration.TotalSeconds; - - var file = rootFolder.CreateFile(GetCacheFileName(filename)); - - //using (var fs = await file.OpenStreamForWriteAsync().ConfigureAwait(false)) - { - await file.WriteAsync(bytes, 0, bytes.Length).ConfigureAwait(false); - } - - entries[key] = new CacheEntry(DateTime.UtcNow, duration, filename); - writeFinished?.Invoke(); - } - catch (Exception ex) // Since we don't observe the task (it's not awaited, we should catch all exceptions) - { - //TODO WinRT doesn't have Console - System.Diagnostics.Debug.WriteLine(string.Format("An error occured while caching to disk image '{0}'.", key)); - System.Diagnostics.Debug.WriteLine(ex.ToString()); - } - finally - { - byte finishedTask; - fileWritePendingTasks.TryRemove(key, out finishedTask); - fileWriteLock.Release(); - } - }); - } - finally - { - _currentWriteLock.Release(); - } - } - - /// - /// Tries to get cached file as stream. - /// - /// The get async. - /// Key. - public virtual async Task TryGetStreamAsync(string key) - { - await initTask.ConfigureAwait(false); - - await WaitForPendingWriteIfExists(key).ConfigureAwait(false); - - try - { - CacheEntry entry; - if (!entries.TryGetValue(key, out entry)) - return null; - - try - { - return GetFileStream(key); - } - catch (IOException) - { - CreateCacheDirIfNotExists(); - } - return null; - } - catch - { - return null; - } - } - - private Stream GetFileStream(string key) - { - var file = GetCacheFileName(key); - if (!rootFolder.FileExists(file)) - { - return null; - } - - return rootFolder.OpenFile(file, FileMode.Create, FileAccess.Read); - } - - private string GetCacheFileName(string file) - { - return $"{cacheFolderName}/{file}"; - } - /// - /// Removes the specified cache entry. - /// - /// Key. - public virtual async Task RemoveAsync(string key) - { - await initTask.ConfigureAwait(false); - - await WaitForPendingWriteIfExists(key).ConfigureAwait(false); - - CacheEntry oldCacheEntry; - if (entries.TryRemove(key, out oldCacheEntry)) - { - try - { - var file = GetCacheFileName(key); - if (rootFolder.FileExists(file)) - { - rootFolder.DeleteFile(file); - } - } - catch - { - } - } - } - - /// - /// Clears all cache entries. - /// - public virtual async Task ClearAsync() - { - await initTask.ConfigureAwait(false); - - while (fileWritePendingTasks.Count != 0) - { - await Task.Delay(20).ConfigureAwait(false); - } - - try - { - await fileWriteLock.WaitAsync().ConfigureAwait(false); - - //var entriesToRemove = rootFolder.GetFileNames($"{cacheFolderName}/*"); - //foreach (var item in entriesToRemove) - { - try - { - rootFolder.DeleteDirectory(cacheFolderName); - } - catch (FileNotFoundException) - { - } - } - } - catch (IOException) - { - CreateCacheDirIfNotExists(); - } - finally - { - entries.Clear(); - fileWriteLock.Release(); - } - } - - private string[] GetAllEntries() - { - return rootFolder.GetFileNames($"{cacheFolderName}/*"); - } - - protected virtual async Task WaitForPendingWriteIfExists(string key) - { - while (fileWritePendingTasks.ContainsKey(key)) - { - await Task.Delay(20).ConfigureAwait(false); - } - } - } -} diff --git a/source/FFImageLoading.Wpf/FFImageSourceBinding.cs b/source/FFImageLoading.Wpf/FFImageSourceBinding.cs deleted file mode 100644 index fb7928db2..000000000 --- a/source/FFImageLoading.Wpf/FFImageSourceBinding.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading.Tasks; - -namespace FFImageLoading -{ - public class FFImageSourceBinding - { - public FFImageSourceBinding(Work.ImageSource imageSource, string path) - { - ImageSource = imageSource; - Path = path; - } - - public Work.ImageSource ImageSource { get; private set; } - - public string Path { get; private set; } - - internal static async Task GetImageSourceBinding(string source) - { - if (string.IsNullOrWhiteSpace(source)) - { - return null; - } - - Uri uri; - if (!Uri.TryCreate(source, UriKind.Absolute, out uri) || uri.Scheme == "file") - { - var isFile = await Cache.FFSourceBindingCache.IsFileAsync(source); - if (isFile) - { - return new FFImageSourceBinding(Work.ImageSource.Filepath, source); - } - - return new FFImageSourceBinding(Work.ImageSource.CompiledResource, source); - } - - return new FFImageSourceBinding(Work.ImageSource.Url, source); - } - - public override bool Equals(object obj) - { - var item = obj as FFImageSourceBinding; - - if (item == null) - { - return false; - } - - return this.ImageSource.Equals(item.ImageSource) && this.Path.Equals(item.Path); - } - - public override int GetHashCode() - { - unchecked - { - int hash = 17; - hash = hash * 23 + this.ImageSource.GetHashCode(); - hash = hash * 23 + Path.GetHashCode(); - return hash; - } - } - } -} diff --git a/source/FFImageLoading.Wpf/Targets/ImageTarget.cs b/source/FFImageLoading.Wpf/Targets/ImageTarget.cs index 63914eece..f621a9e51 100644 --- a/source/FFImageLoading.Wpf/Targets/ImageTarget.cs +++ b/source/FFImageLoading.Wpf/Targets/ImageTarget.cs @@ -56,7 +56,6 @@ public override void Set(IImageLoaderTask task, BitmapSource image, bool animate fade.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseInOut }; Storyboard fadeInStoryboard = new Storyboard(); - //todo Storyboard.SetTargetProperty(fade, new PropertyPath("Opacity")); Storyboard.SetTarget(fade, control); fadeInStoryboard.Children.Add(fade); From 726dfc55534d9129b2b3d069720dc38a0e0a1c59 Mon Sep 17 00:00:00 2001 From: Martijn van Dijk Date: Tue, 24 Sep 2019 11:59:11 +0200 Subject: [PATCH 05/15] Fix indentation --- FFImageLoading.sln | 2858 ++++++++--------- .../FFImageLoading.Forms.Sample.iOS.csproj | 346 +- ...FFImageLoading.MvvmCross.Sample.iOS.csproj | 14 +- .../Simple.iOS.Sample.csproj | 306 +- 4 files changed, 1767 insertions(+), 1757 deletions(-) diff --git a/FFImageLoading.sln b/FFImageLoading.sln index e2abc1fce..41c71ac41 100644 --- a/FFImageLoading.sln +++ b/FFImageLoading.sln @@ -1,1429 +1,1429 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27004.2002 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading", "source\FFImageLoading.Common\FFImageLoading.csproj", "{51CA3BE2-DF00-4F49-8054-E5C776992B61}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Shared", "source\FFImageLoading.Shared\FFImageLoading.Shared.shproj", "{E72AC4ED-03A8-465C-95A2-38B0544B37DB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Droid", "source\FFImageLoading.Droid\FFImageLoading.Droid.csproj", "{74BF9402-3E13-4003-8923-BC20A1294CE2}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Touch", "source\FFImageLoading.Touch\FFImageLoading.Touch.csproj", "{1597F7D4-432C-4F26-B508-0F6FAF0B9711}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B48F3C95-B33F-4EF5-B223-06356D749A80}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.Android.Sample", "samples\ImageLoading.Sample\Simple.Android.Sample.csproj", "{F898A684-E9C1-4154-9F80-6037287233F5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Droid", "samples\ImageLoading.Forms.Sample\Droid\FFImageLoading.Forms.Sample.Droid.csproj", "{9F816002-DBA1-4175-A0CA-0DFD9E086786}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.iOS", "samples\ImageLoading.Forms.Sample\iOS\FFImageLoading.Forms.Sample.iOS.csproj", "{626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample", "samples\ImageLoading.Forms.Sample\Shared\FFImageLoading.Forms.Sample.csproj", "{3A682234-5918-4F58-B02B-598A59C6A7BD}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.Universal.Sample", "samples\Simple.WinUniversal.Sample\Simple.Universal.Sample.csproj", "{4B964916-47F4-4876-8A6B-9048B8A0D148}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.iOS.Sample", "samples\Simple.iOS.Sample\Simple.iOS.Sample.csproj", "{B67D0516-5951-4DE9-B07F-AD3407D8CA90}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Windows", "source\FFImageLoading.Windows\FFImageLoading.Windows.csproj", "{610543A5-D06F-4BCA-9443-E6ADDFF06C71}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Forms", "Forms", "{F7C14B24-556B-413B-B418-4CD194766A26}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms", "source\FFImageLoading.Forms\FFImageLoading.Forms.csproj", "{3D6C1F12-68D7-44C2-A7DE-8E7942627A01}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Droid", "source\FFImageLoading.Forms.Droid\FFImageLoading.Forms.Droid.csproj", "{7014FEB6-0338-4A47-B600-4A1B48127C5C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Touch", "source\FFImageLoading.Forms.Touch\FFImageLoading.Forms.Touch.csproj", "{1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.WinUWP", "source\FFImageLoading.Forms.WinUWP\FFImageLoading.Forms.WinUWP.csproj", "{B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Transformations", "Transformations", "{8F977FC5-CA16-4EEF-9222-2C77F88A7125}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations", "source\FFImageLoading.Transformations\FFImageLoading.Transformations.csproj", "{E68FD3BB-5851-45CC-9B33-DE6AB28B9984}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Droid", "source\FFImageLoading.Transformations.Droid\FFImageLoading.Transformations.Droid.csproj", "{BD3CEB96-93D6-47BD-9474-01DFCD320897}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Touch", "source\FFImageLoading.Transformations.Touch\FFImageLoading.Transformations.Touch.csproj", "{A19942AA-BE22-4CF5-9173-4A78D6B0EB06}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MvvmCross", "MvvmCross", "{1AFB4004-0EB7-4518-9B65-F1008B7962FC}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Cross", "source\FFImageLoading.Cross\FFImageLoading.Cross.shproj", "{3C58B37D-EDB7-4778-AA48-F3AD9A571059}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Svg", "Svg", "{EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Touch", "source\FFImageLoading.Svg.Touch\FFImageLoading.Svg.Touch.csproj", "{AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Droid", "source\FFImageLoading.Svg.Droid\FFImageLoading.Svg.Droid.csproj", "{0BF13419-BA9C-4004-812C-EB22E41927D9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms", "source\FFImageLoading.Svg.Forms\FFImageLoading.Svg.Forms.csproj", "{DE555E87-187D-4768-8053-B2D3195B6792}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Svg.Shared", "source\FFImageLoading.Svg.Shared\FFImageLoading.Svg.Shared.shproj", "{488664FA-5BC5-4868-9FC4-44DB7294EC5A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Touch", "source\FFImageLoading.Svg.Forms.Touch\FFImageLoading.Svg.Forms.Touch.csproj", "{A73A1EA8-E709-474D-9102-DCB2482950AB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Droid", "source\FFImageLoading.Svg.Forms.Droid\FFImageLoading.Svg.Forms.Droid.csproj", "{CCA629E9-55E3-414A-91AF-79A0CB845CD5}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Svg.Forms.Shared", "source\FFImageLoading.Svg.Forms.Shared\FFImageLoading.Svg.Forms.Shared.shproj", "{3F817BAD-EDFB-44E3-A9EF-1FDED55ED787}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg", "source\FFImageLoading.Svg\FFImageLoading.Svg.csproj", "{E5C8FBB7-595D-43FE-B900-46027D0D4F69}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Windows", "source\FFImageLoading.Svg.Windows\FFImageLoading.Svg.Windows.csproj", "{5140739D-209C-41A7-9503-5D5733F4C091}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Windows", "source\FFImageLoading.Svg.Forms.Windows\FFImageLoading.Svg.Forms.Windows.csproj", "{6D4F9DFA-012E-4966-A6E8-01C3464B537E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{A420B061-9AF1-40EC-A728-60536C59031E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.MvvmCross.Sample.Core", "samples\ImageLoading.MvvmCross.Sample\FFImageLoading.MvvmCross.Sample.Core\FFImageLoading.MvvmCross.Sample.Core.csproj", "{087DE224-30F0-4FEF-A960-F93F04182BA6}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.MvvmCross.Sample.Droid", "samples\ImageLoading.MvvmCross.Sample\FFImageLoading.MvvmCross.Sample.Droid\FFImageLoading.MvvmCross.Sample.Droid.csproj", "{A3760566-B91D-435F-94A6-31ADF4C7812F}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Cross.Svg", "source\FFImageLoading.Cross.Svg\FFImageLoading.Cross.Svg.shproj", "{60678181-1544-4276-9B2A-6239C1046EA5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.MvvmCross.Sample.iOS", "samples\ImageLoading.MvvmCross.Sample\FFImageLoading.MvvmCross.Sample.iOS\FFImageLoading.MvvmCross.Sample.iOS.csproj", "{8701A65C-0F63-4BE7-B3F7-D2365BB6366E}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Shared.IosMac", "source\FFImageLoading.Shared.IosMac\FFImageLoading.Shared.IosMac.shproj", "{26F4DB3B-EC7F-46DE-8D51-2CB4BA187A16}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Mac", "source\FFImageLoading.Forms.Mac\FFImageLoading.Forms.Mac.csproj", "{EC240D61-70B0-4561-BB43-F8FB8FD11BF2}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Mac", "samples\ImageLoading.Forms.Sample\Mac\FFImageLoading.Forms.Sample.Mac.csproj", "{75D24499-446D-47DD-9C9A-295E40010CF1}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Tests", "source\Tests\FFImageLoading.Tests\FFImageLoading.Tests.csproj", "{844EF512-7E52-4515-AC00-5FF50800F2B5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Mock", "source\FFImageLoading.Mock\FFImageLoading.Mock.csproj", "{32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Mac", "source\FFImageLoading.Mac\FFImageLoading.Mac.csproj", "{91825F9F-8F2D-4848-8375-68FCAA8C0DC6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Nuspec", "Nuspec", "{5C360F03-BA00-4697-B698-73682B8F510F}" - ProjectSection(SolutionItems) = preProject - nuget\Xamarin.FFImageLoading.Forms.nuspec = nuget\Xamarin.FFImageLoading.Forms.nuspec - nuget\Xamarin.FFImageLoading.nuspec = nuget\Xamarin.FFImageLoading.nuspec - nuget\Xamarin.FFImageLoading.Svg.Forms.nuspec = nuget\Xamarin.FFImageLoading.Svg.Forms.nuspec - nuget\Xamarin.FFImageLoading.Svg.nuspec = nuget\Xamarin.FFImageLoading.Svg.nuspec - nuget\Xamarin.FFImageLoading.Transformations.nuspec = nuget\Xamarin.FFImageLoading.Transformations.nuspec - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Mac", "source\FFImageLoading.Transformations.Mac\FFImageLoading.Transformations.Mac.csproj", "{CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Tizen", "source\FFImageLoading.Forms.Tizen\FFImageLoading.Forms.Tizen.csproj", "{FF334AE1-1B61-4979-8C8E-FD486B246859}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Tizen", "source\FFImageLoading.Transformations.Tizen\FFImageLoading.Transformations.Tizen.csproj", "{CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Tizen", "source\FFImageLoading.Svg.Tizen\FFImageLoading.Svg.Tizen.csproj", "{B27E52FA-74DC-42C7-ACBC-5A893271AFFE}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Tizen", "source\FFImageLoading.Svg.Forms.Tizen\FFImageLoading.Svg.Forms.Tizen.csproj", "{CB1F7760-C8A6-40A3-9B90-F05628B62C2D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Tizen", "source\FFImageLoading.Tizen\FFImageLoading.Tizen.csproj", "{DCC22B65-C384-4101-B61B-1A8515D68F06}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Mac", "source\FFImageLoading.Svg.Mac\FFImageLoading.Svg.Mac.csproj", "{EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Mac", "source\FFImageLoading.Svg.Forms.Mac\FFImageLoading.Svg.Forms.Mac.csproj", "{411B82F4-4F6B-49A0-8E28-260FB65B386F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Mock", "source\FFImageLoading.Forms.Mock\FFImageLoading.Forms.Mock.csproj", "{957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Windows", "source\FFImageLoading.Transformations.Windows\FFImageLoading.Transformations.Windows.csproj", "{399E7E28-5A3D-471F-B6FC-D5770EBB6762}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Tizen", "samples\ImageLoading.Forms.Sample\Tizen\FFImageLoading.Forms.Sample.Tizen.csproj", "{26980B5F-05B3-4070-A2A7-28749166E44C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.TizenForms.Sample", "samples\Simple.TizenForms.Sample\Simple.TizenForms.Sample.csproj", "{01B928BA-5E3B-46C6-B172-624A60ECC534}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Mac.Sample", "samples\FFImageLoading.Mac.Sample\FFImageLoading.Mac.Sample.csproj", "{8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.WinUWP", "samples\ImageLoading.Forms.Sample\WinUWP\FFImageLoading.Forms.Sample.WinUWP.csproj", "{8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Wpf", "source\FFImageLoading.Forms.Wpf\FFImageLoading.Forms.Wpf.csproj", "{0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Wpf", "source\FFImageLoading.Transformations.Wpf\FFImageLoading.Transformations.Wpf.csproj", "{A63B1175-5FB5-4A9C-BCC5-8AC091876D04}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Wpf", "source\FFImageLoading.Wpf\FFImageLoading.Wpf.csproj", "{DC06C582-6C7E-4018-A752-FEB528C65F7E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Wpf", "samples\ImageLoading.Forms.Sample\Wpf\FFImageLoading.Forms.Sample.Wpf.csproj", "{9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}" -EndProject -Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - source\FFImageLoading.Cross\FFImageLoading.Cross.projitems*{1597f7d4-432c-4f26-b508-0f6faf0b9711}*SharedItemsImports = 4 - source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{1597f7d4-432c-4f26-b508-0f6faf0b9711}*SharedItemsImports = 4 - source\FFImageLoading.Shared.IosMac\FFImageLoading.Shared.IosMac.projitems*{26f4db3b-ec7f-46de-8d51-2cb4ba187a16}*SharedItemsImports = 13 - source\FFImageLoading.Cross\FFImageLoading.Cross.projitems*{3c58b37d-edb7-4778-aa48-f3ad9a571059}*SharedItemsImports = 13 - source\FFImageLoading.Svg.Forms.Shared\FFImageLoading.Svg.Forms.Shared.projitems*{3f817bad-edfb-44e3-a9ef-1fded55ed787}*SharedItemsImports = 13 - source\FFImageLoading.Svg.Shared\FFImageLoading.Svg.Shared.projitems*{488664fa-5bc5-4868-9fc4-44db7294ec5a}*SharedItemsImports = 13 - source\FFImageLoading.Svg.Shared\FFImageLoading.Svg.Shared.projitems*{5140739d-209c-41a7-9503-5d5733f4c091}*SharedItemsImports = 4 - source\FFImageLoading.Cross.Svg\FFImageLoading.Cross.Svg.projitems*{60678181-1544-4276-9b2a-6239c1046ea5}*SharedItemsImports = 13 - source\FFImageLoading.Svg.Forms.Shared\FFImageLoading.Svg.Forms.Shared.projitems*{6d4f9dfa-012e-4966-a6e8-01c3464b537e}*SharedItemsImports = 4 - source\FFImageLoading.Cross\FFImageLoading.Cross.projitems*{74bf9402-3e13-4003-8923-bc20a1294ce2}*SharedItemsImports = 4 - source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{74bf9402-3e13-4003-8923-bc20a1294ce2}*SharedItemsImports = 4 - source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{dc06c582-6c7e-4018-a752-feb528c65f7e}*SharedItemsImports = 4 - source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{e72ac4ed-03a8-465c-95a2-38b0544b37db}*SharedItemsImports = 13 - EndGlobalSection - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|ARM = Debug|ARM - Debug|iPhone = Debug|iPhone - Debug|iPhoneSimulator = Debug|iPhoneSimulator - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|ARM = Release|ARM - Release|iPhone = Release|iPhone - Release|iPhoneSimulator = Release|iPhoneSimulator - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|Any CPU.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|ARM.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|ARM.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|iPhone.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|x64.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|x64.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|x86.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|x86.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|Any CPU.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|Any CPU.Build.0 = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|ARM.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|ARM.Build.0 = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|iPhone.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|iPhone.Build.0 = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|x64.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|x64.Build.0 = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|x86.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|x86.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|ARM.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|ARM.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|iPhone.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|x64.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|x64.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|x86.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|x86.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|Any CPU.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|ARM.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|ARM.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|iPhone.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|iPhone.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|x64.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|x64.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|x86.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|x86.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|ARM.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|ARM.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|iPhone.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|x64.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|x64.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|x86.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|x86.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|Any CPU.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|ARM.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|ARM.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|iPhone.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|iPhone.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|x64.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|x64.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|x86.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|x86.Build.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|ARM.ActiveCfg = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|ARM.Build.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|ARM.Deploy.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|iPhone.Build.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x64.ActiveCfg = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x64.Build.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x64.Deploy.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x86.ActiveCfg = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x86.Build.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x86.Deploy.0 = Debug|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|Any CPU.Deploy.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|ARM.ActiveCfg = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|ARM.Build.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|ARM.Deploy.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|iPhone.ActiveCfg = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|iPhone.Build.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x64.ActiveCfg = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x64.Build.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x64.Deploy.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x86.ActiveCfg = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x86.Build.0 = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x86.Deploy.0 = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|ARM.ActiveCfg = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|ARM.Build.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|ARM.Deploy.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|iPhone.Build.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x64.ActiveCfg = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x64.Build.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x64.Deploy.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x86.ActiveCfg = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x86.Build.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x86.Deploy.0 = Debug|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|ARM.ActiveCfg = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|ARM.Build.0 = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|ARM.Deploy.0 = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|iPhone.ActiveCfg = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|iPhone.Build.0 = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x64.ActiveCfg = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x64.Build.0 = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x64.Deploy.0 = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x86.ActiveCfg = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x86.Build.0 = Release|Any CPU - {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x86.Deploy.0 = Release|Any CPU - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|iPhone.ActiveCfg = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|iPhone.Build.0 = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|ARM.ActiveCfg = Release|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|iPhone.ActiveCfg = Release|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|iPhone.Build.0 = Release|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|x64.ActiveCfg = Release|iPhoneSimulator - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|x86.ActiveCfg = Release|iPhoneSimulator - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|ARM.ActiveCfg = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|ARM.Build.0 = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|iPhone.Build.0 = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|x64.ActiveCfg = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|x64.Build.0 = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|x86.ActiveCfg = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|x86.Build.0 = Debug|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|ARM.ActiveCfg = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|ARM.Build.0 = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|iPhone.ActiveCfg = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|iPhone.Build.0 = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x64.ActiveCfg = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x64.Build.0 = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x86.ActiveCfg = Release|Any CPU - {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x86.Build.0 = Release|Any CPU - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|Any CPU.ActiveCfg = Debug|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|Any CPU.Deploy.0 = Debug|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|ARM.ActiveCfg = Debug|ARM - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|ARM.Build.0 = Debug|ARM - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|ARM.Deploy.0 = Debug|ARM - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|iPhone.ActiveCfg = Debug|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x64.ActiveCfg = Debug|x64 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x64.Build.0 = Debug|x64 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x64.Deploy.0 = Debug|x64 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x86.ActiveCfg = Debug|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x86.Build.0 = Debug|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x86.Deploy.0 = Debug|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|Any CPU.ActiveCfg = Release|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|ARM.ActiveCfg = Release|ARM - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|ARM.Build.0 = Release|ARM - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|ARM.Deploy.0 = Release|ARM - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|iPhone.ActiveCfg = Release|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|iPhoneSimulator.ActiveCfg = Release|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x64.ActiveCfg = Release|x64 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x64.Build.0 = Release|x64 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x64.Deploy.0 = Release|x64 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x86.ActiveCfg = Release|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x86.Build.0 = Release|x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x86.Deploy.0 = Release|x86 - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|ARM.Build.0 = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhone.ActiveCfg = Debug|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhone.Build.0 = Debug|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|x64.Build.0 = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|x86.Build.0 = Debug|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|Any CPU.ActiveCfg = Release|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|ARM.ActiveCfg = Release|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|ARM.Build.0 = Release|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|iPhone.ActiveCfg = Release|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|iPhone.Build.0 = Release|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x64.ActiveCfg = Release|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x64.Build.0 = Release|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x86.ActiveCfg = Release|iPhone - {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x86.Build.0 = Release|iPhone - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|Any CPU.Build.0 = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|ARM.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|x64.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|x86.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|Any CPU.ActiveCfg = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|Any CPU.Build.0 = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|ARM.ActiveCfg = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|iPhone.ActiveCfg = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|x64.ActiveCfg = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|x86.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|ARM.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|ARM.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|iPhone.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|x64.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|x64.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|x86.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|x86.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|Any CPU.Build.0 = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|ARM.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|ARM.Build.0 = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|iPhone.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|iPhone.Build.0 = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|x64.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|x64.Build.0 = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|x86.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|x86.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|ARM.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|ARM.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|iPhone.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|x64.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|x64.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|x86.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|x86.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|Any CPU.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|ARM.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|ARM.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|iPhone.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|iPhone.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|x64.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|x64.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|x86.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|x86.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|ARM.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|ARM.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|iPhone.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|x64.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|x64.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|x86.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|x86.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|Any CPU.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|ARM.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|ARM.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|iPhone.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|iPhone.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|x64.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|x64.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|x86.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|x86.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|ARM.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|ARM.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|iPhone.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|x64.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|x64.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|x86.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|x86.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|Any CPU.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|ARM.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|ARM.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|iPhone.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|iPhone.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|x64.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|x64.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|x86.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|x86.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|ARM.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|ARM.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|iPhone.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|x64.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|x64.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|x86.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|x86.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|Any CPU.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|ARM.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|ARM.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|iPhone.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|iPhone.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|x64.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|x64.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|x86.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|x86.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|ARM.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|ARM.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|iPhone.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|x64.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|x64.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|x86.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|x86.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|Any CPU.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|ARM.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|ARM.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|iPhone.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|iPhone.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|x64.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|x64.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|x86.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|x86.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|ARM.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|ARM.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|iPhone.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|x64.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|x64.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|x86.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|x86.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|Any CPU.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|ARM.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|ARM.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|iPhone.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|iPhone.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|x64.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|x64.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|x86.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|x86.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|ARM.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|ARM.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|iPhone.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|x64.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|x64.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|x86.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|x86.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|Any CPU.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|ARM.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|ARM.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|iPhone.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|iPhone.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|x64.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|x64.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|x86.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|x86.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|ARM.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|ARM.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|iPhone.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|x64.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|x64.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|x86.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|x86.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|Any CPU.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|ARM.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|ARM.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|iPhone.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|iPhone.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|x64.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|x64.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|x86.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|x86.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|ARM.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|ARM.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|iPhone.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|x64.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|x64.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|x86.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|x86.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|Any CPU.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|ARM.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|ARM.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|iPhone.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|iPhone.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|x64.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|x64.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|x86.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|x86.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|ARM.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|ARM.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|iPhone.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|x64.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|x64.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|x86.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|x86.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|Any CPU.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|ARM.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|ARM.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|iPhone.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|iPhone.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|x64.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|x64.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|x86.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|x86.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|ARM.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|iPhone.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|x64.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|x64.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|x86.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|x86.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|Any CPU.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|ARM.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|ARM.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|iPhone.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|iPhone.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|x64.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|x64.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|x86.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|x86.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|ARM.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|ARM.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|iPhone.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|x64.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|x64.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|x86.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|x86.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|Any CPU.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|ARM.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|ARM.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|iPhone.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|iPhone.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|x64.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|x64.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|x86.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|x86.Build.0 = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|ARM.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|iPhone.Build.0 = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|x64.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|x86.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|Any CPU.Build.0 = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|ARM.ActiveCfg = Release|ARM - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|ARM.Build.0 = Release|ARM - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|iPhone.ActiveCfg = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|iPhone.Build.0 = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|x64.ActiveCfg = Release|x64 - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|x64.Build.0 = Release|x64 - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|x86.ActiveCfg = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|ARM.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|iPhone.Build.0 = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|x64.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|x86.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|Any CPU.Build.0 = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|ARM.ActiveCfg = Release|ARM - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|ARM.Build.0 = Release|ARM - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|iPhone.ActiveCfg = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|iPhone.Build.0 = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|x64.ActiveCfg = Release|x64 - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|x64.Build.0 = Release|x64 - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|x86.ActiveCfg = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|x86.Build.0 = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|ARM.ActiveCfg = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|ARM.Build.0 = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhone.Build.0 = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|x64.ActiveCfg = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|x64.Build.0 = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|x86.ActiveCfg = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|x86.Build.0 = Debug|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|ARM.ActiveCfg = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|ARM.Build.0 = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|iPhone.ActiveCfg = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|iPhone.Build.0 = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x64.ActiveCfg = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x64.Build.0 = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x86.ActiveCfg = Release|Any CPU - {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x86.Build.0 = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|ARM.ActiveCfg = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|ARM.Build.0 = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhone.Build.0 = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|x64.ActiveCfg = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|x64.Build.0 = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|x86.ActiveCfg = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|x86.Build.0 = Debug|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|ARM.ActiveCfg = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|ARM.Build.0 = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|iPhone.ActiveCfg = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|iPhone.Build.0 = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x64.ActiveCfg = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x64.Build.0 = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x86.ActiveCfg = Release|Any CPU - {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x86.Build.0 = Release|Any CPU - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|ARM.Build.0 = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhone.ActiveCfg = Debug|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhone.Build.0 = Debug|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|x64.Build.0 = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|x86.Build.0 = Debug|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|Any CPU.ActiveCfg = Release|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|ARM.ActiveCfg = Release|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|ARM.Build.0 = Release|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|iPhone.ActiveCfg = Release|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|iPhone.Build.0 = Release|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x64.ActiveCfg = Release|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x64.Build.0 = Release|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x86.ActiveCfg = Release|iPhone - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x86.Build.0 = Release|iPhone - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|ARM.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|ARM.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|iPhone.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|x64.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|x64.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|x86.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|x86.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|Any CPU.Build.0 = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|ARM.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|ARM.Build.0 = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|iPhone.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|iPhone.Build.0 = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|x64.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|x64.Build.0 = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|x86.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|x86.Build.0 = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|ARM.ActiveCfg = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|ARM.Build.0 = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|iPhone.Build.0 = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|x64.ActiveCfg = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|x64.Build.0 = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|x86.ActiveCfg = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|x86.Build.0 = Debug|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|ARM.ActiveCfg = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|ARM.Build.0 = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|iPhone.ActiveCfg = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|iPhone.Build.0 = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|x64.ActiveCfg = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|x64.Build.0 = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|x86.ActiveCfg = Release|Any CPU - {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|x86.Build.0 = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|ARM.ActiveCfg = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|ARM.Build.0 = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|iPhone.Build.0 = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|x64.ActiveCfg = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|x64.Build.0 = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|x86.ActiveCfg = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|x86.Build.0 = Debug|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|Any CPU.Build.0 = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|ARM.ActiveCfg = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|ARM.Build.0 = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|iPhone.ActiveCfg = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|iPhone.Build.0 = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x64.ActiveCfg = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x64.Build.0 = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x86.ActiveCfg = Release|Any CPU - {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x86.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|Any CPU.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|ARM.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|ARM.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|iPhone.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|x64.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|x64.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|x86.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|x86.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|Any CPU.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|Any CPU.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|ARM.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|ARM.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|iPhone.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|iPhone.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|x64.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|x64.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|x86.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|x86.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|ARM.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|ARM.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|iPhone.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|x64.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|x64.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|x86.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|x86.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|Any CPU.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|ARM.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|ARM.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|iPhone.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|iPhone.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|x64.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|x64.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|x86.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|x86.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|ARM.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|iPhone.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|x64.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|x64.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|x86.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|x86.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|Any CPU.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|ARM.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|ARM.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|iPhone.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|iPhone.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|x64.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|x64.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|x86.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|x86.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|ARM.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|ARM.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|iPhone.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|x64.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|x64.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|x86.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|x86.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|Any CPU.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|ARM.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|ARM.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|iPhone.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|iPhone.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|x64.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|x64.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|x86.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|x86.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|ARM.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|iPhone.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|x64.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|x64.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|x86.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|x86.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|Any CPU.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|ARM.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|ARM.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|iPhone.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|iPhone.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|x64.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|x64.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|x86.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|x86.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|ARM.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|ARM.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|iPhone.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|x64.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|x64.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|x86.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|x86.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|Any CPU.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|ARM.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|ARM.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|iPhone.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|iPhone.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|x64.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|x64.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|x86.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|x86.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|ARM.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|iPhone.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|x64.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|x64.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|x86.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|x86.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|Any CPU.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|ARM.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|ARM.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|iPhone.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|iPhone.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|x64.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|x64.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|x86.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|x86.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|ARM.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|ARM.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|iPhone.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|x64.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|x64.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|x86.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|x86.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|Any CPU.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|ARM.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|ARM.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|iPhone.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|iPhone.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|x64.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|x64.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|x86.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|x86.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|ARM.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|ARM.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|iPhone.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|x64.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|x64.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|x86.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|x86.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|Any CPU.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|ARM.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|ARM.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|iPhone.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|iPhone.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|x64.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|x64.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|x86.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|x86.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|ARM.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|ARM.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|iPhone.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|x64.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|x64.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|x86.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|x86.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|Any CPU.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|ARM.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|ARM.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|iPhone.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|iPhone.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|x64.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|x64.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|x86.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|x86.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|ARM.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|ARM.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|iPhone.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|x64.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|x64.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|x86.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|x86.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|Any CPU.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|ARM.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|ARM.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|iPhone.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|iPhone.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|x64.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|x64.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|x86.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|x86.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|Any CPU.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|ARM.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|ARM.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|iPhone.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|x64.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|x64.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|x86.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|x86.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|Any CPU.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|Any CPU.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|ARM.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|ARM.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|iPhone.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|iPhone.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|x64.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|x64.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|x86.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|x86.Build.0 = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|ARM.ActiveCfg = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|ARM.Build.0 = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|iPhone.Build.0 = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|x64.ActiveCfg = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|x64.Build.0 = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|x86.ActiveCfg = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|x86.Build.0 = Debug|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|ARM.ActiveCfg = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|ARM.Build.0 = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|iPhone.ActiveCfg = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|iPhone.Build.0 = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x64.ActiveCfg = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x64.Build.0 = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x86.ActiveCfg = Release|Any CPU - {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x86.Build.0 = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|ARM.ActiveCfg = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|ARM.Build.0 = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhone.Build.0 = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|x64.ActiveCfg = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|x64.Build.0 = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|x86.ActiveCfg = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|x86.Build.0 = Debug|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|Any CPU.ActiveCfg = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|ARM.ActiveCfg = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|ARM.Build.0 = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|iPhone.ActiveCfg = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|iPhone.Build.0 = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|x64.ActiveCfg = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|x64.Build.0 = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|x86.ActiveCfg = Release|Any CPU - {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|x86.Build.0 = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|ARM.ActiveCfg = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|ARM.Build.0 = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|iPhone.Build.0 = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|x64.ActiveCfg = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|x64.Build.0 = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|x86.ActiveCfg = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|x86.Build.0 = Debug|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|ARM.ActiveCfg = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|ARM.Build.0 = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|iPhone.ActiveCfg = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|iPhone.Build.0 = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|x64.ActiveCfg = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|x64.Build.0 = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|x86.ActiveCfg = Release|Any CPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|x86.Build.0 = Release|Any CPU - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|Any CPU.ActiveCfg = Debug|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|Any CPU.Build.0 = Debug|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|Any CPU.Deploy.0 = Debug|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|ARM.ActiveCfg = Debug|ARM - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|ARM.Build.0 = Debug|ARM - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|ARM.Deploy.0 = Debug|ARM - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|iPhone.ActiveCfg = Debug|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x64.ActiveCfg = Debug|x64 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x64.Build.0 = Debug|x64 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x64.Deploy.0 = Debug|x64 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x86.ActiveCfg = Debug|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x86.Build.0 = Debug|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x86.Deploy.0 = Debug|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|Any CPU.ActiveCfg = Release|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|ARM.ActiveCfg = Release|ARM - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|ARM.Build.0 = Release|ARM - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|ARM.Deploy.0 = Release|ARM - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|iPhone.ActiveCfg = Release|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|iPhoneSimulator.ActiveCfg = Release|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x64.ActiveCfg = Release|x64 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x64.Build.0 = Release|x64 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x64.Deploy.0 = Release|x64 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.ActiveCfg = Release|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.Build.0 = Release|x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.Deploy.0 = Release|x86 - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|ARM.ActiveCfg = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|ARM.Build.0 = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhone.Build.0 = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x64.ActiveCfg = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x64.Build.0 = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x86.ActiveCfg = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x86.Build.0 = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|Any CPU.Build.0 = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|ARM.ActiveCfg = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|ARM.Build.0 = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhone.ActiveCfg = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhone.Build.0 = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x64.ActiveCfg = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x64.Build.0 = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x86.ActiveCfg = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x86.Build.0 = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|ARM.ActiveCfg = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|ARM.Build.0 = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhone.Build.0 = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x64.ActiveCfg = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x64.Build.0 = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x86.ActiveCfg = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x86.Build.0 = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|Any CPU.Build.0 = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|ARM.ActiveCfg = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|ARM.Build.0 = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhone.ActiveCfg = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhone.Build.0 = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x64.ActiveCfg = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x64.Build.0 = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x86.ActiveCfg = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x86.Build.0 = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|ARM.ActiveCfg = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|ARM.Build.0 = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhone.Build.0 = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x64.ActiveCfg = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x64.Build.0 = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x86.ActiveCfg = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x86.Build.0 = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|Any CPU.Build.0 = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|ARM.ActiveCfg = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|ARM.Build.0 = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhone.ActiveCfg = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhone.Build.0 = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x64.ActiveCfg = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x64.Build.0 = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x86.ActiveCfg = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x86.Build.0 = Release|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|ARM.ActiveCfg = Debug|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|ARM.Build.0 = Debug|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhone.Build.0 = Debug|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x64.ActiveCfg = Debug|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x64.Build.0 = Debug|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x86.ActiveCfg = Debug|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x86.Build.0 = Debug|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|Any CPU.Build.0 = Release|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|ARM.ActiveCfg = Release|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|ARM.Build.0 = Release|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhone.ActiveCfg = Release|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhone.Build.0 = Release|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x64.ActiveCfg = Release|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x64.Build.0 = Release|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x86.ActiveCfg = Release|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {F898A684-E9C1-4154-9F80-6037287233F5} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {9F816002-DBA1-4175-A0CA-0DFD9E086786} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {3A682234-5918-4F58-B02B-598A59C6A7BD} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {4B964916-47F4-4876-8A6B-9048B8A0D148} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {B67D0516-5951-4DE9-B07F-AD3407D8CA90} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} = {F7C14B24-556B-413B-B418-4CD194766A26} - {7014FEB6-0338-4A47-B600-4A1B48127C5C} = {F7C14B24-556B-413B-B418-4CD194766A26} - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC} = {F7C14B24-556B-413B-B418-4CD194766A26} - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659} = {F7C14B24-556B-413B-B418-4CD194766A26} - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {BD3CEB96-93D6-47BD-9474-01DFCD320897} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {3C58B37D-EDB7-4778-AA48-F3AD9A571059} = {1AFB4004-0EB7-4518-9B65-F1008B7962FC} - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {0BF13419-BA9C-4004-812C-EB22E41927D9} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {DE555E87-187D-4768-8053-B2D3195B6792} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {488664FA-5BC5-4868-9FC4-44DB7294EC5A} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {A73A1EA8-E709-474D-9102-DCB2482950AB} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {CCA629E9-55E3-414A-91AF-79A0CB845CD5} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {3F817BAD-EDFB-44E3-A9EF-1FDED55ED787} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {E5C8FBB7-595D-43FE-B900-46027D0D4F69} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {5140739D-209C-41A7-9503-5D5733F4C091} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {6D4F9DFA-012E-4966-A6E8-01C3464B537E} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {087DE224-30F0-4FEF-A960-F93F04182BA6} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {A3760566-B91D-435F-94A6-31ADF4C7812F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {60678181-1544-4276-9B2A-6239C1046EA5} = {1AFB4004-0EB7-4518-9B65-F1008B7962FC} - {8701A65C-0F63-4BE7-B3F7-D2365BB6366E} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2} = {F7C14B24-556B-413B-B418-4CD194766A26} - {75D24499-446D-47DD-9C9A-295E40010CF1} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {844EF512-7E52-4515-AC00-5FF50800F2B5} = {A420B061-9AF1-40EC-A728-60536C59031E} - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {FF334AE1-1B61-4979-8C8E-FD486B246859} = {F7C14B24-556B-413B-B418-4CD194766A26} - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {411B82F4-4F6B-49A0-8E28-260FB65B386F} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4} = {F7C14B24-556B-413B-B418-4CD194766A26} - {399E7E28-5A3D-471F-B6FC-D5770EBB6762} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {26980B5F-05B3-4070-A2A7-28749166E44C} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {01B928BA-5E3B-46C6-B172-624A60ECC534} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5} = {F7C14B24-556B-413B-B418-4CD194766A26} - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {4BF56189-8DC5-41A9-9440-3C7B9F57E151} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27004.2002 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading", "source\FFImageLoading.Common\FFImageLoading.csproj", "{51CA3BE2-DF00-4F49-8054-E5C776992B61}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Shared", "source\FFImageLoading.Shared\FFImageLoading.Shared.shproj", "{E72AC4ED-03A8-465C-95A2-38B0544B37DB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Droid", "source\FFImageLoading.Droid\FFImageLoading.Droid.csproj", "{74BF9402-3E13-4003-8923-BC20A1294CE2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Touch", "source\FFImageLoading.Touch\FFImageLoading.Touch.csproj", "{1597F7D4-432C-4F26-B508-0F6FAF0B9711}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B48F3C95-B33F-4EF5-B223-06356D749A80}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.Android.Sample", "samples\ImageLoading.Sample\Simple.Android.Sample.csproj", "{F898A684-E9C1-4154-9F80-6037287233F5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Droid", "samples\ImageLoading.Forms.Sample\Droid\FFImageLoading.Forms.Sample.Droid.csproj", "{9F816002-DBA1-4175-A0CA-0DFD9E086786}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.iOS", "samples\ImageLoading.Forms.Sample\iOS\FFImageLoading.Forms.Sample.iOS.csproj", "{626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample", "samples\ImageLoading.Forms.Sample\Shared\FFImageLoading.Forms.Sample.csproj", "{3A682234-5918-4F58-B02B-598A59C6A7BD}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.Universal.Sample", "samples\Simple.WinUniversal.Sample\Simple.Universal.Sample.csproj", "{4B964916-47F4-4876-8A6B-9048B8A0D148}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.iOS.Sample", "samples\Simple.iOS.Sample\Simple.iOS.Sample.csproj", "{B67D0516-5951-4DE9-B07F-AD3407D8CA90}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Windows", "source\FFImageLoading.Windows\FFImageLoading.Windows.csproj", "{610543A5-D06F-4BCA-9443-E6ADDFF06C71}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Forms", "Forms", "{F7C14B24-556B-413B-B418-4CD194766A26}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms", "source\FFImageLoading.Forms\FFImageLoading.Forms.csproj", "{3D6C1F12-68D7-44C2-A7DE-8E7942627A01}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Droid", "source\FFImageLoading.Forms.Droid\FFImageLoading.Forms.Droid.csproj", "{7014FEB6-0338-4A47-B600-4A1B48127C5C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Touch", "source\FFImageLoading.Forms.Touch\FFImageLoading.Forms.Touch.csproj", "{1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.WinUWP", "source\FFImageLoading.Forms.WinUWP\FFImageLoading.Forms.WinUWP.csproj", "{B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Transformations", "Transformations", "{8F977FC5-CA16-4EEF-9222-2C77F88A7125}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations", "source\FFImageLoading.Transformations\FFImageLoading.Transformations.csproj", "{E68FD3BB-5851-45CC-9B33-DE6AB28B9984}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Droid", "source\FFImageLoading.Transformations.Droid\FFImageLoading.Transformations.Droid.csproj", "{BD3CEB96-93D6-47BD-9474-01DFCD320897}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Touch", "source\FFImageLoading.Transformations.Touch\FFImageLoading.Transformations.Touch.csproj", "{A19942AA-BE22-4CF5-9173-4A78D6B0EB06}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MvvmCross", "MvvmCross", "{1AFB4004-0EB7-4518-9B65-F1008B7962FC}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Cross", "source\FFImageLoading.Cross\FFImageLoading.Cross.shproj", "{3C58B37D-EDB7-4778-AA48-F3AD9A571059}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Svg", "Svg", "{EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Touch", "source\FFImageLoading.Svg.Touch\FFImageLoading.Svg.Touch.csproj", "{AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Droid", "source\FFImageLoading.Svg.Droid\FFImageLoading.Svg.Droid.csproj", "{0BF13419-BA9C-4004-812C-EB22E41927D9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms", "source\FFImageLoading.Svg.Forms\FFImageLoading.Svg.Forms.csproj", "{DE555E87-187D-4768-8053-B2D3195B6792}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Svg.Shared", "source\FFImageLoading.Svg.Shared\FFImageLoading.Svg.Shared.shproj", "{488664FA-5BC5-4868-9FC4-44DB7294EC5A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Touch", "source\FFImageLoading.Svg.Forms.Touch\FFImageLoading.Svg.Forms.Touch.csproj", "{A73A1EA8-E709-474D-9102-DCB2482950AB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Droid", "source\FFImageLoading.Svg.Forms.Droid\FFImageLoading.Svg.Forms.Droid.csproj", "{CCA629E9-55E3-414A-91AF-79A0CB845CD5}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Svg.Forms.Shared", "source\FFImageLoading.Svg.Forms.Shared\FFImageLoading.Svg.Forms.Shared.shproj", "{3F817BAD-EDFB-44E3-A9EF-1FDED55ED787}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg", "source\FFImageLoading.Svg\FFImageLoading.Svg.csproj", "{E5C8FBB7-595D-43FE-B900-46027D0D4F69}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Windows", "source\FFImageLoading.Svg.Windows\FFImageLoading.Svg.Windows.csproj", "{5140739D-209C-41A7-9503-5D5733F4C091}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Windows", "source\FFImageLoading.Svg.Forms.Windows\FFImageLoading.Svg.Forms.Windows.csproj", "{6D4F9DFA-012E-4966-A6E8-01C3464B537E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{A420B061-9AF1-40EC-A728-60536C59031E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.MvvmCross.Sample.Core", "samples\ImageLoading.MvvmCross.Sample\FFImageLoading.MvvmCross.Sample.Core\FFImageLoading.MvvmCross.Sample.Core.csproj", "{087DE224-30F0-4FEF-A960-F93F04182BA6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.MvvmCross.Sample.Droid", "samples\ImageLoading.MvvmCross.Sample\FFImageLoading.MvvmCross.Sample.Droid\FFImageLoading.MvvmCross.Sample.Droid.csproj", "{A3760566-B91D-435F-94A6-31ADF4C7812F}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Cross.Svg", "source\FFImageLoading.Cross.Svg\FFImageLoading.Cross.Svg.shproj", "{60678181-1544-4276-9B2A-6239C1046EA5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.MvvmCross.Sample.iOS", "samples\ImageLoading.MvvmCross.Sample\FFImageLoading.MvvmCross.Sample.iOS\FFImageLoading.MvvmCross.Sample.iOS.csproj", "{8701A65C-0F63-4BE7-B3F7-D2365BB6366E}" +EndProject +Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Shared.IosMac", "source\FFImageLoading.Shared.IosMac\FFImageLoading.Shared.IosMac.shproj", "{26F4DB3B-EC7F-46DE-8D51-2CB4BA187A16}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Mac", "source\FFImageLoading.Forms.Mac\FFImageLoading.Forms.Mac.csproj", "{EC240D61-70B0-4561-BB43-F8FB8FD11BF2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Mac", "samples\ImageLoading.Forms.Sample\Mac\FFImageLoading.Forms.Sample.Mac.csproj", "{75D24499-446D-47DD-9C9A-295E40010CF1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Tests", "source\Tests\FFImageLoading.Tests\FFImageLoading.Tests.csproj", "{844EF512-7E52-4515-AC00-5FF50800F2B5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Mock", "source\FFImageLoading.Mock\FFImageLoading.Mock.csproj", "{32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Mac", "source\FFImageLoading.Mac\FFImageLoading.Mac.csproj", "{91825F9F-8F2D-4848-8375-68FCAA8C0DC6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Nuspec", "Nuspec", "{5C360F03-BA00-4697-B698-73682B8F510F}" + ProjectSection(SolutionItems) = preProject + nuget\Xamarin.FFImageLoading.Forms.nuspec = nuget\Xamarin.FFImageLoading.Forms.nuspec + nuget\Xamarin.FFImageLoading.nuspec = nuget\Xamarin.FFImageLoading.nuspec + nuget\Xamarin.FFImageLoading.Svg.Forms.nuspec = nuget\Xamarin.FFImageLoading.Svg.Forms.nuspec + nuget\Xamarin.FFImageLoading.Svg.nuspec = nuget\Xamarin.FFImageLoading.Svg.nuspec + nuget\Xamarin.FFImageLoading.Transformations.nuspec = nuget\Xamarin.FFImageLoading.Transformations.nuspec + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Mac", "source\FFImageLoading.Transformations.Mac\FFImageLoading.Transformations.Mac.csproj", "{CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Tizen", "source\FFImageLoading.Forms.Tizen\FFImageLoading.Forms.Tizen.csproj", "{FF334AE1-1B61-4979-8C8E-FD486B246859}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Tizen", "source\FFImageLoading.Transformations.Tizen\FFImageLoading.Transformations.Tizen.csproj", "{CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Tizen", "source\FFImageLoading.Svg.Tizen\FFImageLoading.Svg.Tizen.csproj", "{B27E52FA-74DC-42C7-ACBC-5A893271AFFE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Tizen", "source\FFImageLoading.Svg.Forms.Tizen\FFImageLoading.Svg.Forms.Tizen.csproj", "{CB1F7760-C8A6-40A3-9B90-F05628B62C2D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Tizen", "source\FFImageLoading.Tizen\FFImageLoading.Tizen.csproj", "{DCC22B65-C384-4101-B61B-1A8515D68F06}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Mac", "source\FFImageLoading.Svg.Mac\FFImageLoading.Svg.Mac.csproj", "{EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Mac", "source\FFImageLoading.Svg.Forms.Mac\FFImageLoading.Svg.Forms.Mac.csproj", "{411B82F4-4F6B-49A0-8E28-260FB65B386F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Mock", "source\FFImageLoading.Forms.Mock\FFImageLoading.Forms.Mock.csproj", "{957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Windows", "source\FFImageLoading.Transformations.Windows\FFImageLoading.Transformations.Windows.csproj", "{399E7E28-5A3D-471F-B6FC-D5770EBB6762}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Tizen", "samples\ImageLoading.Forms.Sample\Tizen\FFImageLoading.Forms.Sample.Tizen.csproj", "{26980B5F-05B3-4070-A2A7-28749166E44C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.TizenForms.Sample", "samples\Simple.TizenForms.Sample\Simple.TizenForms.Sample.csproj", "{01B928BA-5E3B-46C6-B172-624A60ECC534}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Mac.Sample", "samples\FFImageLoading.Mac.Sample\FFImageLoading.Mac.Sample.csproj", "{8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.WinUWP", "samples\ImageLoading.Forms.Sample\WinUWP\FFImageLoading.Forms.Sample.WinUWP.csproj", "{8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Wpf", "source\FFImageLoading.Forms.Wpf\FFImageLoading.Forms.Wpf.csproj", "{0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Wpf", "source\FFImageLoading.Transformations.Wpf\FFImageLoading.Transformations.Wpf.csproj", "{A63B1175-5FB5-4A9C-BCC5-8AC091876D04}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Wpf", "source\FFImageLoading.Wpf\FFImageLoading.Wpf.csproj", "{DC06C582-6C7E-4018-A752-FEB528C65F7E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Wpf", "samples\ImageLoading.Forms.Sample\Wpf\FFImageLoading.Forms.Sample.Wpf.csproj", "{9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}" +EndProject +Global + GlobalSection(SharedMSBuildProjectFiles) = preSolution + source\FFImageLoading.Cross\FFImageLoading.Cross.projitems*{1597f7d4-432c-4f26-b508-0f6faf0b9711}*SharedItemsImports = 4 + source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{1597f7d4-432c-4f26-b508-0f6faf0b9711}*SharedItemsImports = 4 + source\FFImageLoading.Shared.IosMac\FFImageLoading.Shared.IosMac.projitems*{26f4db3b-ec7f-46de-8d51-2cb4ba187a16}*SharedItemsImports = 13 + source\FFImageLoading.Cross\FFImageLoading.Cross.projitems*{3c58b37d-edb7-4778-aa48-f3ad9a571059}*SharedItemsImports = 13 + source\FFImageLoading.Svg.Forms.Shared\FFImageLoading.Svg.Forms.Shared.projitems*{3f817bad-edfb-44e3-a9ef-1fded55ed787}*SharedItemsImports = 13 + source\FFImageLoading.Svg.Shared\FFImageLoading.Svg.Shared.projitems*{488664fa-5bc5-4868-9fc4-44db7294ec5a}*SharedItemsImports = 13 + source\FFImageLoading.Svg.Shared\FFImageLoading.Svg.Shared.projitems*{5140739d-209c-41a7-9503-5d5733f4c091}*SharedItemsImports = 4 + source\FFImageLoading.Cross.Svg\FFImageLoading.Cross.Svg.projitems*{60678181-1544-4276-9b2a-6239c1046ea5}*SharedItemsImports = 13 + source\FFImageLoading.Svg.Forms.Shared\FFImageLoading.Svg.Forms.Shared.projitems*{6d4f9dfa-012e-4966-a6e8-01c3464b537e}*SharedItemsImports = 4 + source\FFImageLoading.Cross\FFImageLoading.Cross.projitems*{74bf9402-3e13-4003-8923-bc20a1294ce2}*SharedItemsImports = 4 + source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{74bf9402-3e13-4003-8923-bc20a1294ce2}*SharedItemsImports = 4 + source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{dc06c582-6c7e-4018-a752-feb528c65f7e}*SharedItemsImports = 4 + source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{e72ac4ed-03a8-465c-95a2-38b0544b37db}*SharedItemsImports = 13 + EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|ARM = Debug|ARM + Debug|iPhone = Debug|iPhone + Debug|iPhoneSimulator = Debug|iPhoneSimulator + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|ARM = Release|ARM + Release|iPhone = Release|iPhone + Release|iPhoneSimulator = Release|iPhoneSimulator + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|Any CPU.Build.0 = Debug|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|ARM.ActiveCfg = Debug|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|ARM.Build.0 = Debug|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|iPhone.Build.0 = Debug|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|x64.ActiveCfg = Debug|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|x64.Build.0 = Debug|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|x86.ActiveCfg = Debug|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|x86.Build.0 = Debug|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|Any CPU.ActiveCfg = Release|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|Any CPU.Build.0 = Release|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|ARM.ActiveCfg = Release|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|ARM.Build.0 = Release|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|iPhone.ActiveCfg = Release|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|iPhone.Build.0 = Release|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|x64.ActiveCfg = Release|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|x64.Build.0 = Release|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|x86.ActiveCfg = Release|Any CPU + {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|x86.Build.0 = Release|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|ARM.ActiveCfg = Debug|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|ARM.Build.0 = Debug|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|iPhone.Build.0 = Debug|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|x64.ActiveCfg = Debug|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|x64.Build.0 = Debug|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|x86.ActiveCfg = Debug|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|x86.Build.0 = Debug|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|Any CPU.Build.0 = Release|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|ARM.ActiveCfg = Release|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|ARM.Build.0 = Release|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|iPhone.ActiveCfg = Release|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|iPhone.Build.0 = Release|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|x64.ActiveCfg = Release|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|x64.Build.0 = Release|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|x86.ActiveCfg = Release|Any CPU + {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|x86.Build.0 = Release|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|ARM.ActiveCfg = Debug|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|ARM.Build.0 = Debug|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|iPhone.Build.0 = Debug|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|x64.ActiveCfg = Debug|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|x64.Build.0 = Debug|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|x86.ActiveCfg = Debug|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|x86.Build.0 = Debug|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|Any CPU.Build.0 = Release|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|ARM.ActiveCfg = Release|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|ARM.Build.0 = Release|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|iPhone.ActiveCfg = Release|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|iPhone.Build.0 = Release|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|x64.ActiveCfg = Release|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|x64.Build.0 = Release|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|x86.ActiveCfg = Release|Any CPU + {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|x86.Build.0 = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|ARM.ActiveCfg = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|ARM.Build.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|ARM.Deploy.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|iPhone.Build.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x64.ActiveCfg = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x64.Build.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x64.Deploy.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x86.ActiveCfg = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x86.Build.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x86.Deploy.0 = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|Any CPU.Deploy.0 = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|ARM.ActiveCfg = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|ARM.Build.0 = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|ARM.Deploy.0 = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|iPhone.ActiveCfg = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|iPhone.Build.0 = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x64.ActiveCfg = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x64.Build.0 = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x64.Deploy.0 = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x86.ActiveCfg = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x86.Build.0 = Release|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Release|x86.Deploy.0 = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|ARM.ActiveCfg = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|ARM.Build.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|ARM.Deploy.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|iPhone.Build.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x64.ActiveCfg = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x64.Build.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x64.Deploy.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x86.ActiveCfg = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x86.Build.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Debug|x86.Deploy.0 = Debug|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|ARM.ActiveCfg = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|ARM.Build.0 = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|ARM.Deploy.0 = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|iPhone.ActiveCfg = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|iPhone.Build.0 = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x64.ActiveCfg = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x64.Build.0 = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x64.Deploy.0 = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x86.ActiveCfg = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x86.Build.0 = Release|Any CPU + {9F816002-DBA1-4175-A0CA-0DFD9E086786}.Release|x86.Deploy.0 = Release|Any CPU + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|iPhone.ActiveCfg = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|iPhone.Build.0 = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|Any CPU.ActiveCfg = Release|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|ARM.ActiveCfg = Release|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|iPhone.ActiveCfg = Release|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|iPhone.Build.0 = Release|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|x64.ActiveCfg = Release|iPhoneSimulator + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}.Release|x86.ActiveCfg = Release|iPhoneSimulator + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|ARM.ActiveCfg = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|ARM.Build.0 = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|iPhone.Build.0 = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|x64.ActiveCfg = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|x64.Build.0 = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|x86.ActiveCfg = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Debug|x86.Build.0 = Debug|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|ARM.ActiveCfg = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|ARM.Build.0 = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|iPhone.ActiveCfg = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|iPhone.Build.0 = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x64.ActiveCfg = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x64.Build.0 = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x86.ActiveCfg = Release|Any CPU + {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x86.Build.0 = Release|Any CPU + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|Any CPU.ActiveCfg = Debug|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|Any CPU.Deploy.0 = Debug|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|ARM.ActiveCfg = Debug|ARM + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|ARM.Build.0 = Debug|ARM + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|ARM.Deploy.0 = Debug|ARM + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|iPhone.ActiveCfg = Debug|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x64.ActiveCfg = Debug|x64 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x64.Build.0 = Debug|x64 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x64.Deploy.0 = Debug|x64 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x86.ActiveCfg = Debug|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x86.Build.0 = Debug|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|x86.Deploy.0 = Debug|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|Any CPU.ActiveCfg = Release|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|ARM.ActiveCfg = Release|ARM + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|ARM.Build.0 = Release|ARM + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|ARM.Deploy.0 = Release|ARM + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|iPhone.ActiveCfg = Release|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|iPhoneSimulator.ActiveCfg = Release|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x64.ActiveCfg = Release|x64 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x64.Build.0 = Release|x64 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x64.Deploy.0 = Release|x64 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x86.ActiveCfg = Release|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x86.Build.0 = Release|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x86.Deploy.0 = Release|x86 + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|ARM.Build.0 = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhone.ActiveCfg = Debug|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhone.Build.0 = Debug|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|x64.Build.0 = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|x86.Build.0 = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|Any CPU.ActiveCfg = Release|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|ARM.ActiveCfg = Release|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|ARM.Build.0 = Release|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|iPhone.ActiveCfg = Release|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|iPhone.Build.0 = Release|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x64.ActiveCfg = Release|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x64.Build.0 = Release|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x86.ActiveCfg = Release|iPhone + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x86.Build.0 = Release|iPhone + {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|Any CPU.Build.0 = Debug|Any CPU + {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|ARM.ActiveCfg = Debug|Any CPU + {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|x64.ActiveCfg = Debug|Any CPU + {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|x86.ActiveCfg = Debug|Any CPU + {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|Any CPU.ActiveCfg = Release|Any CPU + {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|Any CPU.Build.0 = Release|Any CPU + {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|ARM.ActiveCfg = Release|Any CPU + {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|iPhone.ActiveCfg = Release|Any CPU + {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|x64.ActiveCfg = Release|Any CPU + {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|x86.ActiveCfg = Release|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|ARM.ActiveCfg = Debug|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|ARM.Build.0 = Debug|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|iPhone.Build.0 = Debug|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|x64.ActiveCfg = Debug|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|x64.Build.0 = Debug|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|x86.ActiveCfg = Debug|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|x86.Build.0 = Debug|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|Any CPU.Build.0 = Release|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|ARM.ActiveCfg = Release|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|ARM.Build.0 = Release|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|iPhone.ActiveCfg = Release|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|iPhone.Build.0 = Release|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|x64.ActiveCfg = Release|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|x64.Build.0 = Release|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|x86.ActiveCfg = Release|Any CPU + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|x86.Build.0 = Release|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|ARM.ActiveCfg = Debug|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|ARM.Build.0 = Debug|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|iPhone.Build.0 = Debug|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|x64.ActiveCfg = Debug|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|x64.Build.0 = Debug|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|x86.ActiveCfg = Debug|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|x86.Build.0 = Debug|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|Any CPU.Build.0 = Release|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|ARM.ActiveCfg = Release|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|ARM.Build.0 = Release|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|iPhone.ActiveCfg = Release|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|iPhone.Build.0 = Release|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|x64.ActiveCfg = Release|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|x64.Build.0 = Release|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|x86.ActiveCfg = Release|Any CPU + {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|x86.Build.0 = Release|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|ARM.ActiveCfg = Debug|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|ARM.Build.0 = Debug|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|iPhone.Build.0 = Debug|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|x64.ActiveCfg = Debug|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|x64.Build.0 = Debug|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|x86.ActiveCfg = Debug|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|x86.Build.0 = Debug|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|Any CPU.Build.0 = Release|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|ARM.ActiveCfg = Release|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|ARM.Build.0 = Release|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|iPhone.ActiveCfg = Release|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|iPhone.Build.0 = Release|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|x64.ActiveCfg = Release|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|x64.Build.0 = Release|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|x86.ActiveCfg = Release|Any CPU + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|x86.Build.0 = Release|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|ARM.ActiveCfg = Debug|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|ARM.Build.0 = Debug|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|iPhone.Build.0 = Debug|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|x64.ActiveCfg = Debug|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|x64.Build.0 = Debug|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|x86.ActiveCfg = Debug|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|x86.Build.0 = Debug|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|Any CPU.Build.0 = Release|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|ARM.ActiveCfg = Release|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|ARM.Build.0 = Release|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|iPhone.ActiveCfg = Release|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|iPhone.Build.0 = Release|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|x64.ActiveCfg = Release|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|x64.Build.0 = Release|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|x86.ActiveCfg = Release|Any CPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|x86.Build.0 = Release|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|ARM.ActiveCfg = Debug|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|ARM.Build.0 = Debug|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|iPhone.Build.0 = Debug|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|x64.ActiveCfg = Debug|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|x64.Build.0 = Debug|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|x86.ActiveCfg = Debug|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|x86.Build.0 = Debug|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|Any CPU.Build.0 = Release|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|ARM.ActiveCfg = Release|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|ARM.Build.0 = Release|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|iPhone.ActiveCfg = Release|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|iPhone.Build.0 = Release|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|x64.ActiveCfg = Release|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|x64.Build.0 = Release|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|x86.ActiveCfg = Release|Any CPU + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|x86.Build.0 = Release|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|ARM.ActiveCfg = Debug|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|ARM.Build.0 = Debug|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|iPhone.Build.0 = Debug|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|x64.ActiveCfg = Debug|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|x64.Build.0 = Debug|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|x86.ActiveCfg = Debug|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|x86.Build.0 = Debug|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|Any CPU.Build.0 = Release|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|ARM.ActiveCfg = Release|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|ARM.Build.0 = Release|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|iPhone.ActiveCfg = Release|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|iPhone.Build.0 = Release|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|x64.ActiveCfg = Release|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|x64.Build.0 = Release|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|x86.ActiveCfg = Release|Any CPU + {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|x86.Build.0 = Release|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|ARM.ActiveCfg = Debug|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|ARM.Build.0 = Debug|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|iPhone.Build.0 = Debug|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|x64.ActiveCfg = Debug|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|x64.Build.0 = Debug|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|x86.ActiveCfg = Debug|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|x86.Build.0 = Debug|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|Any CPU.Build.0 = Release|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|ARM.ActiveCfg = Release|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|ARM.Build.0 = Release|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|iPhone.ActiveCfg = Release|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|iPhone.Build.0 = Release|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|x64.ActiveCfg = Release|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|x64.Build.0 = Release|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|x86.ActiveCfg = Release|Any CPU + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|x86.Build.0 = Release|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|ARM.ActiveCfg = Debug|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|ARM.Build.0 = Debug|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|iPhone.Build.0 = Debug|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|x64.ActiveCfg = Debug|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|x64.Build.0 = Debug|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|x86.ActiveCfg = Debug|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|x86.Build.0 = Debug|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|Any CPU.Build.0 = Release|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|ARM.ActiveCfg = Release|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|ARM.Build.0 = Release|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|iPhone.ActiveCfg = Release|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|iPhone.Build.0 = Release|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|x64.ActiveCfg = Release|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|x64.Build.0 = Release|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|x86.ActiveCfg = Release|Any CPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|x86.Build.0 = Release|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|ARM.ActiveCfg = Debug|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|ARM.Build.0 = Debug|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|iPhone.Build.0 = Debug|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|x64.ActiveCfg = Debug|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|x64.Build.0 = Debug|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|x86.ActiveCfg = Debug|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|x86.Build.0 = Debug|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|Any CPU.Build.0 = Release|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|ARM.ActiveCfg = Release|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|ARM.Build.0 = Release|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|iPhone.ActiveCfg = Release|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|iPhone.Build.0 = Release|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|x64.ActiveCfg = Release|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|x64.Build.0 = Release|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|x86.ActiveCfg = Release|Any CPU + {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|x86.Build.0 = Release|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|ARM.ActiveCfg = Debug|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|ARM.Build.0 = Debug|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|iPhone.Build.0 = Debug|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|x64.ActiveCfg = Debug|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|x64.Build.0 = Debug|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|x86.ActiveCfg = Debug|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|x86.Build.0 = Debug|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Release|Any CPU.Build.0 = Release|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Release|ARM.ActiveCfg = Release|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Release|ARM.Build.0 = Release|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Release|iPhone.ActiveCfg = Release|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Release|iPhone.Build.0 = Release|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Release|x64.ActiveCfg = Release|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Release|x64.Build.0 = Release|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Release|x86.ActiveCfg = Release|Any CPU + {DE555E87-187D-4768-8053-B2D3195B6792}.Release|x86.Build.0 = Release|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|ARM.ActiveCfg = Debug|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|ARM.Build.0 = Debug|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|iPhone.Build.0 = Debug|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|x64.ActiveCfg = Debug|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|x64.Build.0 = Debug|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|x86.ActiveCfg = Debug|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|x86.Build.0 = Debug|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|Any CPU.Build.0 = Release|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|ARM.ActiveCfg = Release|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|ARM.Build.0 = Release|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|iPhone.ActiveCfg = Release|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|iPhone.Build.0 = Release|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|x64.ActiveCfg = Release|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|x64.Build.0 = Release|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|x86.ActiveCfg = Release|Any CPU + {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|x86.Build.0 = Release|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|ARM.ActiveCfg = Debug|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|ARM.Build.0 = Debug|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|iPhone.Build.0 = Debug|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|x64.ActiveCfg = Debug|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|x64.Build.0 = Debug|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|x86.ActiveCfg = Debug|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|x86.Build.0 = Debug|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|Any CPU.Build.0 = Release|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|ARM.ActiveCfg = Release|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|ARM.Build.0 = Release|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|iPhone.ActiveCfg = Release|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|iPhone.Build.0 = Release|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|x64.ActiveCfg = Release|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|x64.Build.0 = Release|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|x86.ActiveCfg = Release|Any CPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|x86.Build.0 = Release|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|ARM.ActiveCfg = Debug|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|ARM.Build.0 = Debug|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|iPhone.Build.0 = Debug|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|x64.ActiveCfg = Debug|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|x64.Build.0 = Debug|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|x86.ActiveCfg = Debug|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|x86.Build.0 = Debug|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|Any CPU.Build.0 = Release|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|ARM.ActiveCfg = Release|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|ARM.Build.0 = Release|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|iPhone.ActiveCfg = Release|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|iPhone.Build.0 = Release|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|x64.ActiveCfg = Release|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|x64.Build.0 = Release|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|x86.ActiveCfg = Release|Any CPU + {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|x86.Build.0 = Release|Any CPU + {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|ARM.ActiveCfg = Debug|Any CPU + {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|iPhone.Build.0 = Debug|Any CPU + {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|x64.ActiveCfg = Debug|Any CPU + {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|x86.ActiveCfg = Debug|Any CPU + {5140739D-209C-41A7-9503-5D5733F4C091}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5140739D-209C-41A7-9503-5D5733F4C091}.Release|Any CPU.Build.0 = Release|Any CPU + {5140739D-209C-41A7-9503-5D5733F4C091}.Release|ARM.ActiveCfg = Release|ARM + {5140739D-209C-41A7-9503-5D5733F4C091}.Release|ARM.Build.0 = Release|ARM + {5140739D-209C-41A7-9503-5D5733F4C091}.Release|iPhone.ActiveCfg = Release|Any CPU + {5140739D-209C-41A7-9503-5D5733F4C091}.Release|iPhone.Build.0 = Release|Any CPU + {5140739D-209C-41A7-9503-5D5733F4C091}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {5140739D-209C-41A7-9503-5D5733F4C091}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {5140739D-209C-41A7-9503-5D5733F4C091}.Release|x64.ActiveCfg = Release|x64 + {5140739D-209C-41A7-9503-5D5733F4C091}.Release|x64.Build.0 = Release|x64 + {5140739D-209C-41A7-9503-5D5733F4C091}.Release|x86.ActiveCfg = Release|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|ARM.ActiveCfg = Debug|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|iPhone.Build.0 = Debug|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|x64.ActiveCfg = Debug|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|x86.ActiveCfg = Debug|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|Any CPU.Build.0 = Release|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|ARM.ActiveCfg = Release|ARM + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|ARM.Build.0 = Release|ARM + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|iPhone.ActiveCfg = Release|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|iPhone.Build.0 = Release|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|x64.ActiveCfg = Release|x64 + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|x64.Build.0 = Release|x64 + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|x86.ActiveCfg = Release|Any CPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|x86.Build.0 = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|ARM.ActiveCfg = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|ARM.Build.0 = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhone.Build.0 = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|x64.ActiveCfg = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|x64.Build.0 = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|x86.ActiveCfg = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|x86.Build.0 = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|ARM.ActiveCfg = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|ARM.Build.0 = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|iPhone.ActiveCfg = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|iPhone.Build.0 = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x64.ActiveCfg = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x64.Build.0 = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x86.ActiveCfg = Release|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x86.Build.0 = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|ARM.ActiveCfg = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|ARM.Build.0 = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhone.Build.0 = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|x64.ActiveCfg = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|x64.Build.0 = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|x86.ActiveCfg = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|x86.Build.0 = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|ARM.ActiveCfg = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|ARM.Build.0 = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|iPhone.ActiveCfg = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|iPhone.Build.0 = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x64.ActiveCfg = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x64.Build.0 = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x86.ActiveCfg = Release|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x86.Build.0 = Release|Any CPU + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|ARM.Build.0 = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhone.ActiveCfg = Debug|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhone.Build.0 = Debug|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|x64.ActiveCfg = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|x64.Build.0 = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|x86.ActiveCfg = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|x86.Build.0 = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|Any CPU.ActiveCfg = Release|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|ARM.ActiveCfg = Release|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|ARM.Build.0 = Release|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|iPhone.ActiveCfg = Release|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|iPhone.Build.0 = Release|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x64.ActiveCfg = Release|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x64.Build.0 = Release|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x86.ActiveCfg = Release|iPhone + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x86.Build.0 = Release|iPhone + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|ARM.ActiveCfg = Debug|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|ARM.Build.0 = Debug|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|iPhone.Build.0 = Debug|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|x64.ActiveCfg = Debug|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|x64.Build.0 = Debug|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|x86.ActiveCfg = Debug|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|x86.Build.0 = Debug|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|Any CPU.Build.0 = Release|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|ARM.ActiveCfg = Release|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|ARM.Build.0 = Release|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|iPhone.ActiveCfg = Release|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|iPhone.Build.0 = Release|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|x64.ActiveCfg = Release|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|x64.Build.0 = Release|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|x86.ActiveCfg = Release|Any CPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|x86.Build.0 = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|ARM.ActiveCfg = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|ARM.Build.0 = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|iPhone.Build.0 = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|x64.ActiveCfg = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|x64.Build.0 = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|x86.ActiveCfg = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|x86.Build.0 = Debug|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|ARM.ActiveCfg = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|ARM.Build.0 = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|iPhone.ActiveCfg = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|iPhone.Build.0 = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|x64.ActiveCfg = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|x64.Build.0 = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|x86.ActiveCfg = Release|Any CPU + {75D24499-446D-47DD-9C9A-295E40010CF1}.Release|x86.Build.0 = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|ARM.ActiveCfg = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|ARM.Build.0 = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|iPhone.Build.0 = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|x64.ActiveCfg = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|x64.Build.0 = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|x86.ActiveCfg = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Debug|x86.Build.0 = Debug|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|Any CPU.Build.0 = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|ARM.ActiveCfg = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|ARM.Build.0 = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|iPhone.ActiveCfg = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|iPhone.Build.0 = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x64.ActiveCfg = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x64.Build.0 = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x86.ActiveCfg = Release|Any CPU + {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x86.Build.0 = Release|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|Any CPU.Build.0 = Debug|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|ARM.ActiveCfg = Debug|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|ARM.Build.0 = Debug|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|iPhone.Build.0 = Debug|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|x64.ActiveCfg = Debug|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|x64.Build.0 = Debug|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|x86.ActiveCfg = Debug|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|x86.Build.0 = Debug|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|Any CPU.ActiveCfg = Release|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|Any CPU.Build.0 = Release|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|ARM.ActiveCfg = Release|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|ARM.Build.0 = Release|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|iPhone.ActiveCfg = Release|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|iPhone.Build.0 = Release|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|x64.ActiveCfg = Release|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|x64.Build.0 = Release|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|x86.ActiveCfg = Release|Any CPU + {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|x86.Build.0 = Release|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|ARM.ActiveCfg = Debug|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|ARM.Build.0 = Debug|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|iPhone.Build.0 = Debug|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|x64.ActiveCfg = Debug|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|x64.Build.0 = Debug|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|x86.ActiveCfg = Debug|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|x86.Build.0 = Debug|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|Any CPU.Build.0 = Release|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|ARM.ActiveCfg = Release|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|ARM.Build.0 = Release|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|iPhone.ActiveCfg = Release|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|iPhone.Build.0 = Release|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|x64.ActiveCfg = Release|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|x64.Build.0 = Release|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|x86.ActiveCfg = Release|Any CPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|x86.Build.0 = Release|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|ARM.ActiveCfg = Debug|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|ARM.Build.0 = Debug|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|iPhone.Build.0 = Debug|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|x64.ActiveCfg = Debug|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|x64.Build.0 = Debug|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|x86.ActiveCfg = Debug|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|x86.Build.0 = Debug|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|Any CPU.Build.0 = Release|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|ARM.ActiveCfg = Release|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|ARM.Build.0 = Release|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|iPhone.ActiveCfg = Release|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|iPhone.Build.0 = Release|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|x64.ActiveCfg = Release|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|x64.Build.0 = Release|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|x86.ActiveCfg = Release|Any CPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|x86.Build.0 = Release|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|ARM.ActiveCfg = Debug|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|ARM.Build.0 = Debug|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|iPhone.Build.0 = Debug|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|x64.ActiveCfg = Debug|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|x64.Build.0 = Debug|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|x86.ActiveCfg = Debug|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|x86.Build.0 = Debug|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|Any CPU.Build.0 = Release|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|ARM.ActiveCfg = Release|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|ARM.Build.0 = Release|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|iPhone.ActiveCfg = Release|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|iPhone.Build.0 = Release|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|x64.ActiveCfg = Release|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|x64.Build.0 = Release|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|x86.ActiveCfg = Release|Any CPU + {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|x86.Build.0 = Release|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|ARM.ActiveCfg = Debug|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|ARM.Build.0 = Debug|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|iPhone.Build.0 = Debug|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|x64.ActiveCfg = Debug|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|x64.Build.0 = Debug|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|x86.ActiveCfg = Debug|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|x86.Build.0 = Debug|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|Any CPU.Build.0 = Release|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|ARM.ActiveCfg = Release|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|ARM.Build.0 = Release|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|iPhone.ActiveCfg = Release|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|iPhone.Build.0 = Release|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|x64.ActiveCfg = Release|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|x64.Build.0 = Release|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|x86.ActiveCfg = Release|Any CPU + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|x86.Build.0 = Release|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|ARM.ActiveCfg = Debug|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|ARM.Build.0 = Debug|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|iPhone.Build.0 = Debug|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|x64.ActiveCfg = Debug|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|x64.Build.0 = Debug|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|x86.ActiveCfg = Debug|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|x86.Build.0 = Debug|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|Any CPU.Build.0 = Release|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|ARM.ActiveCfg = Release|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|ARM.Build.0 = Release|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|iPhone.ActiveCfg = Release|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|iPhone.Build.0 = Release|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|x64.ActiveCfg = Release|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|x64.Build.0 = Release|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|x86.ActiveCfg = Release|Any CPU + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|x86.Build.0 = Release|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|ARM.ActiveCfg = Debug|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|ARM.Build.0 = Debug|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|iPhone.Build.0 = Debug|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|x64.ActiveCfg = Debug|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|x64.Build.0 = Debug|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|x86.ActiveCfg = Debug|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|x86.Build.0 = Debug|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|Any CPU.Build.0 = Release|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|ARM.ActiveCfg = Release|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|ARM.Build.0 = Release|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|iPhone.ActiveCfg = Release|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|iPhone.Build.0 = Release|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|x64.ActiveCfg = Release|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|x64.Build.0 = Release|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|x86.ActiveCfg = Release|Any CPU + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|x86.Build.0 = Release|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|ARM.ActiveCfg = Debug|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|ARM.Build.0 = Debug|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|iPhone.Build.0 = Debug|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|x64.ActiveCfg = Debug|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|x64.Build.0 = Debug|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|x86.ActiveCfg = Debug|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|x86.Build.0 = Debug|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|Any CPU.Build.0 = Release|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|ARM.ActiveCfg = Release|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|ARM.Build.0 = Release|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|iPhone.ActiveCfg = Release|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|iPhone.Build.0 = Release|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|x64.ActiveCfg = Release|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|x64.Build.0 = Release|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|x86.ActiveCfg = Release|Any CPU + {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|x86.Build.0 = Release|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|ARM.ActiveCfg = Debug|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|ARM.Build.0 = Debug|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|iPhone.Build.0 = Debug|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|x64.ActiveCfg = Debug|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|x64.Build.0 = Debug|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|x86.ActiveCfg = Debug|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|x86.Build.0 = Debug|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|Any CPU.Build.0 = Release|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|ARM.ActiveCfg = Release|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|ARM.Build.0 = Release|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|iPhone.ActiveCfg = Release|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|iPhone.Build.0 = Release|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|x64.ActiveCfg = Release|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|x64.Build.0 = Release|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|x86.ActiveCfg = Release|Any CPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|x86.Build.0 = Release|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|ARM.ActiveCfg = Debug|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|ARM.Build.0 = Debug|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|iPhone.Build.0 = Debug|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|x64.ActiveCfg = Debug|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|x64.Build.0 = Debug|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|x86.ActiveCfg = Debug|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|x86.Build.0 = Debug|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|Any CPU.Build.0 = Release|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|ARM.ActiveCfg = Release|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|ARM.Build.0 = Release|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|iPhone.ActiveCfg = Release|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|iPhone.Build.0 = Release|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|x64.ActiveCfg = Release|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|x64.Build.0 = Release|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|x86.ActiveCfg = Release|Any CPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|x86.Build.0 = Release|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|ARM.ActiveCfg = Debug|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|ARM.Build.0 = Debug|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|iPhone.Build.0 = Debug|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|x64.ActiveCfg = Debug|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|x64.Build.0 = Debug|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|x86.ActiveCfg = Debug|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|x86.Build.0 = Debug|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|Any CPU.Build.0 = Release|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|ARM.ActiveCfg = Release|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|ARM.Build.0 = Release|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|iPhone.ActiveCfg = Release|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|iPhone.Build.0 = Release|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|x64.ActiveCfg = Release|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|x64.Build.0 = Release|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|x86.ActiveCfg = Release|Any CPU + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|x86.Build.0 = Release|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|Any CPU.Build.0 = Debug|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|ARM.ActiveCfg = Debug|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|ARM.Build.0 = Debug|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|iPhone.Build.0 = Debug|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|x64.ActiveCfg = Debug|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|x64.Build.0 = Debug|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|x86.ActiveCfg = Debug|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|x86.Build.0 = Debug|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|Any CPU.ActiveCfg = Release|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|Any CPU.Build.0 = Release|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|ARM.ActiveCfg = Release|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|ARM.Build.0 = Release|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|iPhone.ActiveCfg = Release|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|iPhone.Build.0 = Release|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|x64.ActiveCfg = Release|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|x64.Build.0 = Release|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|x86.ActiveCfg = Release|Any CPU + {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|x86.Build.0 = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|ARM.ActiveCfg = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|ARM.Build.0 = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|iPhone.Build.0 = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|x64.ActiveCfg = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|x64.Build.0 = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|x86.ActiveCfg = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|x86.Build.0 = Debug|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|ARM.ActiveCfg = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|ARM.Build.0 = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|iPhone.ActiveCfg = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|iPhone.Build.0 = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x64.ActiveCfg = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x64.Build.0 = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x86.ActiveCfg = Release|Any CPU + {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x86.Build.0 = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|ARM.ActiveCfg = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|ARM.Build.0 = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhone.Build.0 = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|x64.ActiveCfg = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|x64.Build.0 = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|x86.ActiveCfg = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|x86.Build.0 = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|Any CPU.ActiveCfg = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|ARM.ActiveCfg = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|ARM.Build.0 = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|iPhone.ActiveCfg = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|iPhone.Build.0 = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|x64.ActiveCfg = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|x64.Build.0 = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|x86.ActiveCfg = Release|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Release|x86.Build.0 = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|ARM.ActiveCfg = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|ARM.Build.0 = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|iPhone.Build.0 = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|x64.ActiveCfg = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|x64.Build.0 = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|x86.ActiveCfg = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Debug|x86.Build.0 = Debug|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|ARM.ActiveCfg = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|ARM.Build.0 = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|iPhone.ActiveCfg = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|iPhone.Build.0 = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|x64.ActiveCfg = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|x64.Build.0 = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|x86.ActiveCfg = Release|Any CPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}.Release|x86.Build.0 = Release|Any CPU + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|Any CPU.ActiveCfg = Debug|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|Any CPU.Build.0 = Debug|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|Any CPU.Deploy.0 = Debug|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|ARM.ActiveCfg = Debug|ARM + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|ARM.Build.0 = Debug|ARM + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|ARM.Deploy.0 = Debug|ARM + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|iPhone.ActiveCfg = Debug|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x64.ActiveCfg = Debug|x64 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x64.Build.0 = Debug|x64 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x64.Deploy.0 = Debug|x64 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x86.ActiveCfg = Debug|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x86.Build.0 = Debug|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Debug|x86.Deploy.0 = Debug|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|Any CPU.ActiveCfg = Release|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|ARM.ActiveCfg = Release|ARM + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|ARM.Build.0 = Release|ARM + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|ARM.Deploy.0 = Release|ARM + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|iPhone.ActiveCfg = Release|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|iPhoneSimulator.ActiveCfg = Release|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x64.ActiveCfg = Release|x64 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x64.Build.0 = Release|x64 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x64.Deploy.0 = Release|x64 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.ActiveCfg = Release|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.Build.0 = Release|x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.Deploy.0 = Release|x86 + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|ARM.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|ARM.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhone.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x64.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x64.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x86.ActiveCfg = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x86.Build.0 = Debug|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|Any CPU.Build.0 = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|ARM.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|ARM.Build.0 = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhone.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhone.Build.0 = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x64.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x64.Build.0 = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x86.ActiveCfg = Release|Any CPU + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x86.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|ARM.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|ARM.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhone.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x64.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x64.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x86.ActiveCfg = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x86.Build.0 = Debug|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|Any CPU.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|ARM.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|ARM.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhone.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhone.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x64.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x64.Build.0 = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x86.ActiveCfg = Release|Any CPU + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x86.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|ARM.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|ARM.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhone.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x64.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x64.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x86.ActiveCfg = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x86.Build.0 = Debug|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|Any CPU.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|ARM.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|ARM.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhone.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhone.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x64.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x64.Build.0 = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x86.ActiveCfg = Release|Any CPU + {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x86.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|ARM.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|ARM.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhone.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x64.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x64.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x86.ActiveCfg = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x86.Build.0 = Debug|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|Any CPU.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|ARM.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|ARM.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhone.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhone.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x64.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x64.Build.0 = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x86.ActiveCfg = Release|Any CPU + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {F898A684-E9C1-4154-9F80-6037287233F5} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {9F816002-DBA1-4175-A0CA-0DFD9E086786} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {3A682234-5918-4F58-B02B-598A59C6A7BD} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {4B964916-47F4-4876-8A6B-9048B8A0D148} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {B67D0516-5951-4DE9-B07F-AD3407D8CA90} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} = {F7C14B24-556B-413B-B418-4CD194766A26} + {7014FEB6-0338-4A47-B600-4A1B48127C5C} = {F7C14B24-556B-413B-B418-4CD194766A26} + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC} = {F7C14B24-556B-413B-B418-4CD194766A26} + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659} = {F7C14B24-556B-413B-B418-4CD194766A26} + {E68FD3BB-5851-45CC-9B33-DE6AB28B9984} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} + {BD3CEB96-93D6-47BD-9474-01DFCD320897} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} + {3C58B37D-EDB7-4778-AA48-F3AD9A571059} = {1AFB4004-0EB7-4518-9B65-F1008B7962FC} + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} + {0BF13419-BA9C-4004-812C-EB22E41927D9} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} + {DE555E87-187D-4768-8053-B2D3195B6792} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} + {488664FA-5BC5-4868-9FC4-44DB7294EC5A} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} + {A73A1EA8-E709-474D-9102-DCB2482950AB} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} + {CCA629E9-55E3-414A-91AF-79A0CB845CD5} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} + {3F817BAD-EDFB-44E3-A9EF-1FDED55ED787} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} + {E5C8FBB7-595D-43FE-B900-46027D0D4F69} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} + {5140739D-209C-41A7-9503-5D5733F4C091} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} + {6D4F9DFA-012E-4966-A6E8-01C3464B537E} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} + {087DE224-30F0-4FEF-A960-F93F04182BA6} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {A3760566-B91D-435F-94A6-31ADF4C7812F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {60678181-1544-4276-9B2A-6239C1046EA5} = {1AFB4004-0EB7-4518-9B65-F1008B7962FC} + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2} = {F7C14B24-556B-413B-B418-4CD194766A26} + {75D24499-446D-47DD-9C9A-295E40010CF1} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {844EF512-7E52-4515-AC00-5FF50800F2B5} = {A420B061-9AF1-40EC-A728-60536C59031E} + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} + {FF334AE1-1B61-4979-8C8E-FD486B246859} = {F7C14B24-556B-413B-B418-4CD194766A26} + {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} + {B27E52FA-74DC-42C7-ACBC-5A893271AFFE} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} + {CB1F7760-C8A6-40A3-9B90-F05628B62C2D} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} + {411B82F4-4F6B-49A0-8E28-260FB65B386F} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} + {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4} = {F7C14B24-556B-413B-B418-4CD194766A26} + {399E7E28-5A3D-471F-B6FC-D5770EBB6762} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} + {26980B5F-05B3-4070-A2A7-28749166E44C} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {01B928BA-5E3B-46C6-B172-624A60ECC534} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5} = {F7C14B24-556B-413B-B418-4CD194766A26} + {A63B1175-5FB5-4A9C-BCC5-8AC091876D04} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} + {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4BF56189-8DC5-41A9-9440-3C7B9F57E151} + EndGlobalSection +EndGlobal diff --git a/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj b/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj index 94d3a9d7c..5b22e6ae0 100644 --- a/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj +++ b/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj @@ -1,172 +1,176 @@ - - - - - Debug - iPhoneSimulator - {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF} - Exe - FFImageLoading.Forms.Sample.iOS - Resources - FFImageLoadingFormsSampleiOS - - - true - full - false - bin\iPhoneSimulator\Debug - DEBUG;ENABLE_TEST_CLOUD; - prompt - 4 - false - i386, x86_64 - None - true - iPhone Developer - true - true - NSUrlSessionHandler - - - full - true - bin\iPhone\Release - prompt - 4 - false - ARMv7, ARM64 - Entitlements.plist - true - iPhone Developer - - - full - true - bin\iPhoneSimulator\Release - prompt - 4 - false - i386 - None - iPhone Developer - true - NSUrlSessionHandler - - - true - full - false - bin\iPhone\Debug - DEBUG;ENABLE_TEST_CLOUD; - prompt - 4 - false - ARMv7, ARM64 - Entitlements.plist - true - true - true - iPhone Developer - NSUrlSessionHandler - - - - - - - - - ..\..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll - - - ..\..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.iOS\SkiaSharp.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Core.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Forms.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {3A682234-5918-4F58-B02B-598A59C6A7BD} - FFImageLoading.Forms.Sample - - - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC} - FFImageLoading.Forms.Touch - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} - FFImageLoading.Transformations.Touch - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - FFImageLoading.Touch - - - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} - FFImageLoading.Svg.Touch - - - {A73A1EA8-E709-474D-9102-DCB2482950AB} - FFImageLoading.Svg.Forms.Touch - - - - - - - + + + + + Debug + iPhoneSimulator + {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF} + Exe + FFImageLoading.Forms.Sample.iOS + Resources + FFImageLoadingFormsSampleiOS + + + true + full + false + bin\iPhoneSimulator\Debug + DEBUG;ENABLE_TEST_CLOUD; + prompt + 4 + false + i386, x86_64 + None + true + iPhone Developer + true + true + NSUrlSessionHandler + + + full + true + bin\iPhone\Release + prompt + 4 + false + ARMv7, ARM64 + Entitlements.plist + true + iPhone Developer + + + full + true + bin\iPhoneSimulator\Release + prompt + 4 + false + i386 + None + iPhone Developer + true + NSUrlSessionHandler + + + true + full + false + bin\iPhone\Debug + DEBUG;ENABLE_TEST_CLOUD; + prompt + 4 + false + ARMv7, ARM64 + Entitlements.plist + true + true + true + iPhone Developer + NSUrlSessionHandler + + + + + + + + + ..\..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll + + + ..\..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.iOS\SkiaSharp.dll + + + ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Core.dll + + + ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Forms.dll + + + ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll + + + ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll + + + ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll + + + ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll + + + + + false + + + false + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + {3A682234-5918-4F58-B02B-598A59C6A7BD} + FFImageLoading.Forms.Sample + + + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC} + FFImageLoading.Forms.Touch + + + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} + FFImageLoading.Forms + + + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} + FFImageLoading.Transformations.Touch + + + {51CA3BE2-DF00-4F49-8054-E5C776992B61} + FFImageLoading + + + {1597F7D4-432C-4F26-B508-0F6FAF0B9711} + FFImageLoading.Touch + + + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} + FFImageLoading.Svg.Touch + + + {A73A1EA8-E709-474D-9102-DCB2482950AB} + FFImageLoading.Svg.Forms.Touch + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj index f957e877f..f1aa01f1e 100644 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj +++ b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj @@ -32,7 +32,8 @@ pdbonly true bin\iPhone\Release - + + prompt 4 iPhone Developer @@ -47,7 +48,8 @@ pdbonly true bin\iPhoneSimulator\Release - + + prompt 4 iPhone Developer @@ -108,8 +110,12 @@ - - + + false + + + false + diff --git a/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj b/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj index 3f96fd97b..c78d9ca59 100644 --- a/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj +++ b/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj @@ -1,154 +1,154 @@ - - - - Debug - iPhoneSimulator - {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {B67D0516-5951-4DE9-B07F-AD3407D8CA90} - Exe - Simple.iOS.Sample - Resources - SimpleiOSSample - - - true - full - false - bin\iPhoneSimulator\Debug - DEBUG;ENABLE_TEST_CLOUD; - prompt - 4 - false - x86_64 - None - true - true - iPhone Developer - - - full - true - bin\iPhone\Release - prompt - 4 - false - ARMv7, ARM64 - Entitlements.plist - true - iPhone Developer - - - full - true - bin\iPhoneSimulator\Release - prompt - 4 - false - i386 - None - iPhone Developer - - - true - full - false - bin\iPhone\Debug - DEBUG;ENABLE_TEST_CLOUD; - prompt - 4 - false - ARMv7, ARM64 - Entitlements.plist - true - iPhone Developer - true - true - true - - - - - - - - - ..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll - - - - - false - - - false - - - false - - - false - - - false - - - false - - - false - - - false - - - false - - - - - - - - - - - - - - - - - - - ImagesViewController.cs - - - - ImageViewCell.cs - - - - ImageDetailsViewController.cs - - - - - - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} - FFImageLoading.Transformations.Touch - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - FFImageLoading.Touch - - - - - - - + + + + Debug + iPhoneSimulator + {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {B67D0516-5951-4DE9-B07F-AD3407D8CA90} + Exe + Simple.iOS.Sample + Resources + SimpleiOSSample + + + true + full + false + bin\iPhoneSimulator\Debug + DEBUG;ENABLE_TEST_CLOUD; + prompt + 4 + false + x86_64 + None + true + true + iPhone Developer + + + full + true + bin\iPhone\Release + prompt + 4 + false + ARMv7, ARM64 + Entitlements.plist + true + iPhone Developer + + + full + true + bin\iPhoneSimulator\Release + prompt + 4 + false + i386 + None + iPhone Developer + + + true + full + false + bin\iPhone\Debug + DEBUG;ENABLE_TEST_CLOUD; + prompt + 4 + false + ARMv7, ARM64 + Entitlements.plist + true + iPhone Developer + true + true + true + + + + + + + + + ..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll + + + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + false + + + + + + + + + + + + + + + + + + + ImagesViewController.cs + + + + ImageViewCell.cs + + + + ImageDetailsViewController.cs + + + + + + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} + FFImageLoading.Transformations.Touch + + + {51CA3BE2-DF00-4F49-8054-E5C776992B61} + FFImageLoading + + + {1597F7D4-432C-4F26-B508-0F6FAF0B9711} + FFImageLoading.Touch + + + + + + + \ No newline at end of file From 72e106ac63c8a43e789a114fd5356c7a48e2fc22 Mon Sep 17 00:00:00 2001 From: Martijn van Dijk Date: Tue, 24 Sep 2019 12:30:57 +0200 Subject: [PATCH 06/15] Add initial files --- Directory.build.props | 69 +++++++++++++++ Directory.build.targets | 39 +++++++++ FFImageLoading/FFImageLoading.csproj | 122 +++++++++++++++++++++++++++ FFImageLoading/readme.txt | 10 +++ global.json | 5 ++ icon.png | Bin 0 -> 10953 bytes samples/Directory.build.props | 18 ++++ samples/Directory.build.targets | 39 +++++++++ 8 files changed, 302 insertions(+) create mode 100644 Directory.build.props create mode 100644 Directory.build.targets create mode 100644 FFImageLoading/FFImageLoading.csproj create mode 100644 FFImageLoading/readme.txt create mode 100644 global.json create mode 100644 icon.png create mode 100644 samples/Directory.build.props create mode 100644 samples/Directory.build.targets diff --git a/Directory.build.props b/Directory.build.props new file mode 100644 index 000000000..f57320a3b --- /dev/null +++ b/Directory.build.props @@ -0,0 +1,69 @@ + + + Copyright (c) Daniel Luberda + MIT + https://github.com/luberda-molinet/FFImageLoading + https://raw.githubusercontent.com/luberda-molinet/FFImageLoading/master/icon.png + Daniel Luberda, Fabien Molinet + Daniel Luberda, Fabien Molinet + xamarin, android, ios, mac, windows, image, cache, caching, memory, bitmap, lru, load, loading, save, effects, photo + https://github.com/luberda-molinet/FFImageLoading/releases + false + + https://github.com/luberda-molinet/FFImageLoading + git + $(AssemblyName) ($(TargetFramework)) + en + 2.5.0 + AnyCPU + + 7.3 + $(NoWarn);1591;1701;1702;1705;VSX1000;NU1603 + + $(MSBuildProjectName.Contains('UnitTest')) + + + + false + true + true + portable + true + + + + full + true + + + + + + true + true + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb + + + + + + + + + + + + + All + + + + + + + + All + + + \ No newline at end of file diff --git a/Directory.build.targets b/Directory.build.targets new file mode 100644 index 000000000..c46e85457 --- /dev/null +++ b/Directory.build.targets @@ -0,0 +1,39 @@ + + + $(DefineConstants);NETSTANDARD;PORTABLE + + + $(DefineConstants);NET;WPF;XAML + + + $(DefineConstants);NETFX_CORE;XAML;WINDOWS;WINDOWS_UWP + 10.0.16299.0 + 10.0.16299.0 + + + $(DefineConstants);MONO;UIKIT;COCOA;IOS + + + $(DefineConstants);MONO;COCOA;MAC + + + $(DefineConstants);MONO;COCOA;TVOS + + + $(DefineConstants);MONO;COCOA;WATCHOS + + + $(DefineConstants);MONO;ANDROID + Resources + Resource + Resources\Resource.designer.cs + + + $(DefineConstants);NETCOREAPP + + + $(DefineConstants);TIZEN + Tizen + v4.0 + + \ No newline at end of file diff --git a/FFImageLoading/FFImageLoading.csproj b/FFImageLoading/FFImageLoading.csproj new file mode 100644 index 000000000..5f6d4bdfb --- /dev/null +++ b/FFImageLoading/FFImageLoading.csproj @@ -0,0 +1,122 @@ + + + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40;uap10.0.16299;net472 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40 + + + + netstandard2.0;monoandroid90; + netstandard2.0;uap10.0.16299 + netstandard2.0;xamarin.ios10 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10 + + + + FFImageLoading + FFImageLoading + Xamarin.FFImageLoading + Xamarin library to load images quickly and easily on Xamarin.iOS / Xamarin.Android / Xamarin.Mac / Windows + true + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FFImageLoading/readme.txt b/FFImageLoading/readme.txt new file mode 100644 index 000000000..4fbcf6a53 --- /dev/null +++ b/FFImageLoading/readme.txt @@ -0,0 +1,10 @@ +--------------------------------- +FFImageLoading +--------------------------------- + +TODO: getting started here + + +--------------------------------- +Star on Github if this project helps you: https://github.com/luberda-molinet/FFImageLoading +--------------------------------- \ No newline at end of file diff --git a/global.json b/global.json new file mode 100644 index 000000000..6c7a82eea --- /dev/null +++ b/global.json @@ -0,0 +1,5 @@ +{ + "msbuild-sdks": { + "MSBuild.Sdk.Extras": "2.0.46" + } +} \ No newline at end of file diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7a8dc1428a93acc3da40cd27b1d29407e78cb651 GIT binary patch literal 10953 zcmZ{qWmr_-7w>17p=$=DYX}KxX^?KDn?Xrw5D=teC>a_Q6zLXz3=NXfEgeHhNjD18 zFkJrk^}R3l*>BFXp6}kzUgxZ}zn>UgZB=3dS^@w7K&-B&r2jZ0{x|S&9-loj);|G& zXUXbH@`ip{N5Q^XhFh}_msvY2QbJNv=GH)Y2n6z^jCQ8?1GX!5Uwtm`%~LW$q^S))1DKGL=f_d4osaK+aL&#hrb(#vrTfq0+SB`>tLj#v z%Q3H=tet;ejNL#Sdv+UpD6>oa+j}@Cy}VOntm!H+f`rba_fOasg)}ZHjbKT~hW~xQ zg-m@xQ(M6dwSkgSN(ND2dol|G;0Q2-s@Li#Xf+s}8yy(C&q%g9FLW=s2$l76q@9ev zwrF^(WjDJ&eB&zFJe!fKsA*HtU{g`QF;_F5muS&>j6lYGU4Vn2g4Z2XloZwz)lg7$ z;tQXVwL;ZIx_2|XddhZNptzUA0o5A;BZv!PFyh3)TJx;9bVwj5|0o2AdO|-30&wCY z0Pr~Nr?ln!q7_xI8iV%2?M_Csn!PctUMBpn@6=f=<`leH`cSZURsxDUb^sOuA;rjw zhEb^>4{P~P3uS#z|JurUP0{oWBuX{kG6zTdGrvm!KBplr40f!ru4sVZLFEBhP`T7l zi$x#^3?_#{haR51(i#~dNZjc<#~TLLI_oJ(`dk1n)1nrU*J(KsmrOD ztvxmY8>qz zuj&vER@|EEUuqZ`X0GX1ELdFZ%XFW{FVj2qR!(mm`cZU_lG0RGMBH;P-y!5n6e zWA_c_tkOs%qg{R`kzhlh3c%#Uz5-S9)t3tX0Fu zsocWsvBM~wLaXwZY2>(Od5(3y`mIcwSccx}L?=>m#Tl zhGO~F7ajVsUTA5)mb=igw(XMKB@^@y8%M?0(vgD#UUFAUx2=+(P3wrk&(C6ybTSx3JDBh!GdzRR7jj3o~bUqy96Z} z|2r09w=j2zp+F+Tj>xYJ`T>B9BT%n~?W#l@ zFiB)eX?^hNZOw`8@!Yw~s2ZEQyD-&b$&Is5?xj@;iU`Wrp~*m>So&fkJ*OvU7TFi& zmcctOWz|Gyb~f1EXoVc7cg9=&?n#-*erz;`hPcjnZtyL=GIF7xTb|059R#$31Q*3> zYFQk%)}tP7&VAe84ei@8iEwRk+InZwM7v$w4SS|eF47AIy%~?r4Y+QuJ*F5CnVECh zY9Xn1S+B=j!$9?&junNoYCWanSNcdq}x^Fp>uAYp>N|dH>rgG?dsi!JRHu< z#cKRabU_X@d}77OA4;cgh{t?TVc_L^7)ioBKR?H)CNf&piw=7lnlFXs(&SP6CB3~D z;veUH#>bGM!QQYTjvKS8qMNu;WWdG1`;6|cutPI*^0Q{O4pCkz0a7-|uwzyB?6kaQ zeJZT%jXrlV30X%%e(JEG{GPRJK+q!heG>ihxT9O@q8R(U3(i{SqL^ZI(*ECD2g{rc z)^-WCyZdN*@^nX(_u8YL_s$R2g@Lq%#M}*+-b>|irYRyg_c-*7_m7fvxSsJzvoxOl zQsQUmP0UZ#-!s%ujeD8YbpE%@fP_Yz%{ifK<#`vQrIHdD`Ro~2gRkt}6}jDV3sa^h z8%gZFPo(~^I){EsQ`@cJ>W`Bc4#K#fJW5EoGovqEU_U@f{$n>hc;G&?EpVjCb4P4u z?iQE0{UZ7u{kO7qJyIGWpQ*->^Z5t33vr$PydvW~E6yNI@J*}O!`+mSY$)bDv)s91 zqve<}cwN4phJMa-eU><2DblO*{*?5jWr_O7z(>Evg{MqgQg+?VJ)xI#p`*^ujznQ! zPcP@^V55{L($sj10ab zmOBxT8&Fd@8K3Eg_U#YdJNQOpOLX$VyxjnQaDf{cNRC^?TbQdS_|e#EDgh+It}Q&aG2lQvG8yUe*HSr zF0X}P5J!n}Ac~JCGLfSDLpQ{J-s6cRys4Pe8JBZFPwQN3yD4TT)ctU8hrubKM#=#D zR~q6vK*mONd@TKZYK=8oN0W`L;#t6=#S8bpE83MYS>1?x0Kibpzs_i*IAxULnlzq?N{G39#tD~8y$=X0~ib1I52Q>l$qV?0M_ zH&pIuM$k0QpS@H-WS+?~wLFS5enm$Xxh}hktBg4Bu5Jz^LmtgeaB<*fsw2;ZbG2jCE`Z$(E3+tq~L_Pwmi@^eruP@QG-28 znwEoRlFX0(oQvXe_88>WQSV#7@;IxCw2!CnFsEs&ZGw}jsXAUC#5zoZnZ3Q9Q@X8w12pf@B2Io?RyG zK5oyxDoi+~Zq4TG4-Ali+4 z|Mf3YX7OC5$}tJCyG1YPPIPbz{n#VXA96?-}I?$f}~*G7zpfHoQ%OBo}p% zf{PMaq*?JNCmP{*n^&xlMcbP(O2?AGGg6jrfXAcw00|{};G$UkEPgUa2)|eYG$p|A zO+GJnf2JVs1Io=)D4m&@I4|c1q~-4b-ov)FpGh#?SQEM24^nIjiinpQUZM)o_=X_p zPHJ4cj|2dw>H-^>>3uBD=@(C`cV$=8TYEhfgL`SYE4q>9EvB!>iATsgs=oBDdDyNU z&=J0)hdsfe=V*+;W}_T@6Xwd^lq`NF2Zhn&_%kCExN5)#c9 z(3*?7??vW%xwhJ}p?7hiZSDlz_JtMri{DY$Q0u!$ua5LlYG#%=(S6$e!$I;6owqx; zDssOCTqQyNcX~}#cXUJNbk*AAWZi#YoU9SG1z7Vn8+je4MorPA;liRgADHyw#H@JL zz$!vKcuSto07`G(8#^9esapo^>2&032;AFlhebdXJfl~mb2JRz+g z2qqLJ6iPjW#3jk11u2nAR_IFLvL_v_>>Z%$32`SX++seDV2wP2nUjpEM@U4xJcI^^ z5_0Dff_I7X3M(lIDrvhudqw8@ug6c;h$y-UWCp-uA#*9OlJ%X*Bj%P#B=>rY;X-Wa z$Q(s}tX)5b-%@7Vgsfq(p?OidML|S_1J)JTZIF=?tvtGph+!S$_0KZj)^uuEtK$m? z;lTJXLCVaEh_V&trn0#hKlO7&%Yo>XfhB;VAB)wKo2_DBt$Rnl|I!UrpLaW%E4=}R zA#Z9&W5PXirLHv#pYmf`U-01ZnbFg{MS#Mv<N~miFSx}3MeI7q?n>QO2~v9rZYaoOZ-j^FChDlrpAFOCcbE~ykz{5 zIA~v2!Qt$yz8N#sqh9zWbGSJi%lbpWfe6nxtPzu9WbB8PDE4~1BKZmEp=PzdAopCO!bpMIf=sC#+syHLKZh z03Q1W!a6CBt9je7ta7o#(v$%j5G2L>=$;9JQh2(SLTo=72bKwB2WdQ=>|{Q4T2E9? zwxWX5={{RH#K%KOGB}?(%u_*9OhNycL~ZB+9^(3lLX||CG;N0(vC$}8g42Z`EW>%} z&nK>zbCZsvUcmGb3YmR5IBvX90@Q~M&b&N8H6;6u+plS-}+0-xG#QK%g7aRX0VI6c+!EoI%91c-bxNHEuVdGoGi6XMP>{CoAjFUkO&I;GJ zn5;YL!~|_3CnM;frr1;>vho@s-07iu4gU;<}K{ z=eMIU009;;tnkIFm4EmF6amSE9Yk;Hbcuv%a783%%6dZ?S!@`hmqHX(iPjzKJ*?ht z_B@A72pacoJ_dYa^>?5UpvO6 z`(cdO1DBpe{acsj{BCr*E5<;#K_>ZwuHA$kRMUy6dHLBI3YI`b#*6Zh;wMqHLM&Y#U zkhzGX_jqq6pldS0@(Vo4+VZL4is337Ru;9c<1$s*%q(b6=}L=^06t!e)uwK^S9<-k zSH}cI0H83QbhFby|Ee}KqNdZBLY|FGKur_`&Oeh22I#Vxrt);zGwkoqoK(Uf%sxw7 z+Q&T0i59whWOj+W6|5nA_~yG1Z%@?xP_uhXDuA&Zh!Rv zC6^7@OuSQmt@>wYh0@5y3+25k9>-XPz4$wKYmFLKAyrxj;cbKH#VI<`SYRa82Trjs zLv>*y#|{7+JSe?sucLcH$7@A^I9sV0-{+#Zyj?jqX+Wnq;5mS$HNYXd2d*a145J)d zOj~u^fKZmiz33@`PvzqE>DSnqoLc zKEHY~wW0{tHwC+|{6fmy<2Jpdj3EEJ9YbGIPxpKvC%&KmHSu&glg-{aU=d?|+WXjU za~g%$8{z)9OFE2E*3XuKfL*K$qmY;*<|mlHCJ0ltro7^71+V~ZmSgy8At~A1Y7}GP z2Sn{&o?UqY4A1!vB|upc3l+mHn*5^b1w(F}zds)#xtQyUyan4@*(xL3u1I?s+d*Vp z2&FizWp}ripGw|Y{p8L=SE*cwT7sh$M$?+z!tB>0syScB-+(f&AW*%^=utZK%-{cp zx9DDtD}F2NFon^F!5iqKk}zbVa4-UKG`d0#yyIbm*2<-B^H(mza0f7+e@g}TN7p(CGart^A9l> zY!0%7wA!fIS$r54r^;q=N5oVaFD;+%Rfw@JM^^fS;!l_6|5guQ%gS#L$64=;I#n($ z|2~3%{r4Nt8^5g!gm3AtpZfRSmlRt+Z&7A~P0#R6ZJo5ZmEZW1}sy z^98fOGO?Ma=z?bO)FfwZ?&(0WeR;Wo1ltXJdEuP8hEJB^Qrx3PI_7Z$$x8n3qmcNTg9>M1RYu zQMs(etDytq3g^Gt{~(H&j3c=E0VR zi6m()g`i++ z7b73kA`A`fYFj9)zlf2j@{k&2#VZJKo(|BJ#2y;|MFkY;`%TIaHFI^gMk-10m@Cg| zo%_hVW$z%cPb5ee-a*2y&_n3Fj?9O%+48*pTpA)zR|Xk&EEep+7msgsU}y}fBe<#% zjZO?7mi#GXZuZF4{xRXCsW;w6j^E?qk5ScPPW!wZKtRyM6e(rJe=GIY>P}AA9#1zDq%7k0nAb%xhOmucZH!&^? zlDQCXvTT(s-TQfR7t~j^!+hJ}+x;*%o%eAH;TgnK0>k-MMiTts&GC5&v-8SQcMgF> z9{3xYy#DcKR`sMpVGUC496xXrZuSr?O&^0yOZ*a;s=lSv0l?}F^`Oe&d!Wn{5w{@K zc$!zMo*o}@+%TRma84Hg?1P`OTpI~SkrYu7^{29x`Omdh;#U-L8-elQl7ArKU#*{d z{BMGG9icW%qsp#BSo3OrRSJXIP@9VL?nIvK%dvx@4*@?>hIO~HXBA>4T+wQ9t&~Fn zYETm&=U2JYrHAMl2`Yrke)wD}$fk3LI@XT)=71?*++RpT^cC*-Yy5|y0V`QkqRWhv z@MuPSHnOh7M%q6w&7=d9ow)Ifpjj>7CWYySGdKMG>0pdqy_X zB^n?P?NyXI@G@lR{&LiLaA;v!dPo%2;OOEZ>0=aV>5{L9Mg`97!(x8|3L86cuwYmm z3o~EW3vUVZDt{)tAKF)T?>Hra(DU}7;nwyI|GhH{`g4;-2qw$0m;c&&0noBdtokdQG)FB_(Qdq+nTFQr=P@yxNAfq zm%T*LuK2PCOf;1~LphETEHS#*ZdJwkl)}6y6rYk7nraISD2tlV2RhAz`Rs)?9o~HA z^6nV!=0&M^-&g5bT)ux|m#ZSWnSV3-wKIG{PTgsZ?-=}sSkoFx8_ftB&fxovjl`2; zoLr(Ae^69PX2KZ&B%8D2*D-Po%4intf3urNh@?^MP}*4TnuXQ60tK zfk{{i7_$GkUknG~H(PYxj1s$Sx7}3H$Ptc4*iXn2i@O+CXttf-ls_OTRjef?c~FMO zh$sL!3`)9e_%!whm?#!85|F%;cLR-@0LU*WQ;KTA1`scCI`MrKi_fIlymfS)m_H6= zGp5EKQjpcD`j@F_V)nXZI=a?R`$a#e5%07}vrJ zz8I2~#tAR!4BCHFz5BZo*t`rw*i%lR3Yk)en*3c zbDcUy;xt5r1UgKWwr%tECduGv7jRKC1R@l}71{PaMG-m#37jQd#vsj;K+YnI@JAbB-)3AEdG5hMfUzb*AWjkGNt^{n#REUPpZCJQf(r1Ig3!1d3 zCk>ww=G9Fi{Sau!)%dq>Rj=Be--^?-L-)Y?Fj%?`mP8*wSuW-GTKD9dhh-_FiNg6E z0Q-`g4BFd9)ev8Y`f7yaGq!48Fb-qhu$(r& zTAG~E9c1Z1TfC1ve~J3P+F(I`Puh>)@ks6vSN)xzDVbk9Fht70ssBCMWJA!c#w$Ho zU+sR=$-B4`S`+nVSO+0Qa8eYKN@On9vJ)C+KYw*Ph<^}eX|H2s;KmXs5HE3{&<6^g_ljyRGI@t&tPwdl;eXS5om`;6 zVzrlo#=_n`Ss5XwnY%dAngZ8!spY(Q@^0|xIj&F!wZ=lz?%vy$4k6t1PnZ78u_Aj$%0^I ztQF_B^37*aT%Q#7eu%;9y`lP#<#mY=2dmeN=}ZyeliK&Jv+1a0S(%XYDN@UJ&#C!3 z)TGo4nUH9m%2fS+YN?QQ3B^ZWVuz}C!?QTm1~8+iSbzcyoF^1W{@%FPa*AXa+rshr zL&E~$aOC{`A>fK48iB%oni+1pq4qvX-~kPBiBF)U%8;tc5)L^2$Hi2u|BE`*|8Qbb zq@UV2)}igLJ9_%zeku5Aaq+O@GIPr#3Bb*n!08vOn>O+1$x(~rCr)wnD13hXxrYIL z>Ig-Y50EJ|Pyn9U{ZZk3^~=NgLG$#tplYFYQ0t)A)<2x{<6r!zBL{V>gi$P@c)^bk z7mF{kHfgN9Pp~4N*rGFfFRFemI3Qi2=;fQW!AbzMMnlj}sElGRSL$N-e`X`>W6->B z;QXFwHJU(hdeMlR{BkAaY_?`yfq**iz7r6{y-VYz_e9@xb+^Y|y4KBivhUyBg;hdI zc!7X)$Q-eWNky6FrcUJYf=Fv>1e&@qRe$_$D}|;?(;p-D)Xq-h;Ps}#FFbH36>Oi2 z-hwgQ9ZW|XEM9*kubt~dUGW|zTw>pTHw6;HV4_XZ^qn0FWRsQ`DSI^`zZrj!c;;pZ zy4dS^F5t;#ia5S+@iQ+6V0D>>9S9^I)5y=*@>Gpl83j}FO;a8{wBFKGSe|G+lS7Fl z?vyIo2L09AVG2CleqSC8S$KUEVkH*+=1EFL3$(l26ziRjMEHh!jg^n{ z>nCm;Chm^gCI#iwlZ$sWZ=gFgZ+AM5_l)(n9ak?egBE_Nt}OE7bJNeVV)1`zg6n6i z3^!)4|LGe8AGy3<`Z4%b;ylXo;pmGP#*Aw~(B7dh@s|yMyb}wHew1?G&81GqzwzIN zNzxt6jB~@D8PVFu6~tCxWK$$my3oU@y58vAjHha-)1bbu?cuxliyOJ`z<9JIoZjm* zZ-&&?&X+6+t_9O7rQTzw&>coq#c)#Cw65iV*sI{7zJ|4v+Q7e!t~YHTkebI)=?(h${*`D&z2s(TpM$ ztttBY8}lye!k!eQhA_I~ZlRc*z4FQmqf$)Y(AbN6;i=-WB6Rf_C+$&{A3PENLX80r z@v*v_S&+ZX7q&J>oj;(V!N*{hYh76OWvfvBV;(K&#iUT5 zp|2YzK?0%8@3KVI#~Rc%P!!~-mi=!0Z=y4^BRtReeCkh5lJQXh>uA9|9wPSP#tk3< z-B(wtlNs@r=^Z*mZ$w>qW(4!NEN!QiYq!*|Zgp9ulZ%|iGavg1#VkUOxxVq{$lf-e z!n7y!zhr~-)=maqM153)Xi+)%PP>m>`7>d^`yf=BA-`&ym%7qe=p5J zb|w(G*umttIk4KAAK+&9>|yz6oYeixj)_LiP)rqn@KNa4U4Me?k1BKJ%X|ybu$y{8 zb>i8@-P?KrL<3q*iQ@AU77K&3zpE$rlMT~3cO72<2;aIqTg%C}<2oZs0CN|u+#a0% zcHdtNV%b3#n=Z_vSsKD-HlKse)J+^7zwu~Vr2;|wsKZ02@rUgisgOT$TIHXyKS_a& zi-LK6`-Ea%H8%qh1{^uQ|BU8VG1K|1Dq0#G(`v;A##~WW;fjxpOjZsRKfT^>EZm<| z{6T;BZbLnPp~}Wba2MU@8dajzI?+>|p06}puFAEOF;?#08T!1-zg@MZA z|HUX}eEo{NLf8PHnFl?-3fOv)-H}@5bN9ZBpGcQ4_g5K1O7g$M0e{-xoGxNzcjB>g z_KiB{H?`4?WqD8bp0(dKxD(NdT<}0k-#o|99)$~-k!&v-aM%HA(C`|{#Do7lgoyyP zrxBMWKSZ{MR@*OTZ25&}jDdr3fi4#YW?OFy$pz#d(KDg)tVUSk!FrRy7zS$qHg;jaj4TyE7EkzYsC2YBAJ zID@QK;Ntkn@K?VqPeSesIkeM-F}?Vo_~<3yja;pNG4 zCX_#fHjWy8%Akf;XTAiWmJn&teJf8v9Ya+>IT9Jfwr<|v8ROAnj0}jbwg8q z%8};`0=v~fRU+B8wt}5JX4d|HzAsLyErM?^Ir+G_XZw4Rocf=v$Ek*A8GEn>k!t!} zv-8wdWmWJWHiZ{;++Ti(1-h}PT@{_)H~%b0SCpaPug!9`I2z%f-XXc%0X_i*jr|X} YDJ0wOsvua!BccjWSJqalRIm#FKPb)8!vFvP literal 0 HcmV?d00001 diff --git a/samples/Directory.build.props b/samples/Directory.build.props new file mode 100644 index 000000000..2b17a3247 --- /dev/null +++ b/samples/Directory.build.props @@ -0,0 +1,18 @@ + + + Copyright (c) Daniel Luberda + Daniel Luberda, Fabien Molinet + Daniel Luberda, Fabien Molinet + $(AssemblyName) ($(TargetFramework)) + en + 1.0.0 + + latest + $(NoWarn);1591;1701;1702;1705;VSX1000;NU1603 + + AnyCPU + full + + $(MSBuildProjectName.Contains('.Forms')) + + \ No newline at end of file diff --git a/samples/Directory.build.targets b/samples/Directory.build.targets new file mode 100644 index 000000000..4dd262a5a --- /dev/null +++ b/samples/Directory.build.targets @@ -0,0 +1,39 @@ + + + $(DefineConstants);NETSTANDARD;PORTABLE + + + $(DefineConstants);NET;WPF;XAML + + + $(DefineConstants);NETFX_CORE;XAML;WINDOWS;WINDOWS_UWP + 10.0.16299.0 + 10.0.16299.0 + + + $(DefineConstants);MONO;UIKIT;COCOA;IOS + + + $(DefineConstants);MONO;COCOA;MAC + + + $(DefineConstants);MONO;COCOA;TVOS + + + $(DefineConstants);MONO;COCOA;WATCHOS + + + $(DefineConstants);MONO;ANDROID + Resources + Resource + Resources\Resource.designer.cs + + + $(DefineConstants);NETCOREAPP + + + $(DefineConstants);TIZEN + Tizen + v4.0 + + \ No newline at end of file From 314adbc36b9ae1dcaaac045bcd551db9260374f0 Mon Sep 17 00:00:00 2001 From: Martijn van Dijk Date: Tue, 24 Sep 2019 15:06:04 +0200 Subject: [PATCH 07/15] Add new projects --- .../FFImageLoading.Forms.csproj | 122 +++ FFImageLoading.Forms/readme.txt | 10 + .../FFImageLoading.MvvmCross.csproj | 122 +++ FFImageLoading.MvvmCross/readme.txt | 10 + .../FFImageLoading.Svg.Forms.csproj | 122 +++ FFImageLoading.Svg.Forms/readme.txt | 10 + FFImageLoading.Svg/FFImageLoading.Svg.csproj | 122 +++ FFImageLoading.Svg/readme.txt | 10 + .../FFImageLoading.Transformations.csproj | 122 +++ FFImageLoading.Transformations/readme.txt | 10 + FFImageLoading.sln | 987 +----------------- .../FFImageLoading.Mac.Sample.csproj | 193 ++-- .../FFImageLoading.Forms.Sample.Droid.csproj | 595 +++++------ .../FFImageLoading.Forms.Sample.Mac.csproj | 298 +++--- .../Shared/FFImageLoading.Forms.Sample.csproj | 9 - .../FFImageLoading.Forms.Sample.Tizen.csproj | 7 - .../FFImageLoading.Forms.Sample.WinUWP.csproj | 360 +++---- .../FFImageLoading.Forms.Sample.Wpf.csproj | 20 - .../FFImageLoading.Forms.Sample.iOS.csproj | 33 +- ...FImageLoading.MvvmCross.Sample.Core.csproj | 122 +-- ...ImageLoading.MvvmCross.Sample.Droid.csproj | 441 ++++---- ...FFImageLoading.MvvmCross.Sample.iOS.csproj | 22 +- .../Simple.Android.Sample.csproj | 478 ++++----- .../Simple.TizenForms.Sample.csproj | 9 - .../Simple.Universal.Sample.csproj | 302 +++--- .../Simple.iOS.Sample.csproj | 14 - .../FFImageLoading.Forms.Droid.csproj | 355 +++---- .../FFImageLoading.Forms.Mac.csproj | 202 ++-- .../FFImageLoading.Forms.Tizen.csproj | 1 - .../FFImageLoading.Forms.Touch.csproj | 160 ++- .../FFImageLoading.Forms.WinUWP.csproj | 300 +++--- .../FFImageLoading.Forms.Wpf.csproj | 8 - .../FFImageLoading.Forms.csproj | 2 - .../FFImageLoading.Mac.csproj | 185 ++-- .../FFImageLoading.Mock.csproj | 4 - .../FFImageLoading.Svg.Droid.csproj | 136 ++- .../FFImageLoading.Svg.Forms.Droid.csproj | 492 +++++---- .../FFImageLoading.Svg.Forms.Mac.csproj | 202 ++-- .../FFImageLoading.Svg.Forms.Tizen.csproj | 3 - .../FFImageLoading.Svg.Forms.Touch.csproj | 178 ++-- .../FFImageLoading.Svg.Forms.Windows.csproj | 304 +++--- .../FFImageLoading.Svg.Forms.csproj | 4 - .../FFImageLoading.Svg.Mac.csproj | 160 ++- .../FFImageLoading.Svg.Tizen.csproj | 5 - .../FFImageLoading.Svg.Touch.csproj | 142 ++- .../FFImageLoading.Svg.Windows.csproj | 280 +++-- .../FFImageLoading.Svg.csproj | 4 - .../FFImageLoading.Tizen.csproj | 4 - .../FFImageLoading.Touch.csproj | 164 ++- ...FImageLoading.Transformations.Droid.csproj | 150 ++- .../FFImageLoading.Transformations.Mac.csproj | 194 ++-- ...FImageLoading.Transformations.Tizen.csproj | 5 - ...FImageLoading.Transformations.Touch.csproj | 144 ++- ...mageLoading.Transformations.Windows.csproj | 5 - .../FFImageLoading.Transformations.Wpf.csproj | 10 - .../FFImageLoading.Transformations.csproj | 5 - .../FFImageLoading.Windows.csproj | 204 ++-- .../FFImageLoading.Wpf.csproj | 7 - .../FFImageLoading.Tests.csproj | 52 +- 59 files changed, 3917 insertions(+), 4704 deletions(-) create mode 100644 FFImageLoading.Forms/FFImageLoading.Forms.csproj create mode 100644 FFImageLoading.Forms/readme.txt create mode 100644 FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj create mode 100644 FFImageLoading.MvvmCross/readme.txt create mode 100644 FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj create mode 100644 FFImageLoading.Svg.Forms/readme.txt create mode 100644 FFImageLoading.Svg/FFImageLoading.Svg.csproj create mode 100644 FFImageLoading.Svg/readme.txt create mode 100644 FFImageLoading.Transformations/FFImageLoading.Transformations.csproj create mode 100644 FFImageLoading.Transformations/readme.txt diff --git a/FFImageLoading.Forms/FFImageLoading.Forms.csproj b/FFImageLoading.Forms/FFImageLoading.Forms.csproj new file mode 100644 index 000000000..89dbd1425 --- /dev/null +++ b/FFImageLoading.Forms/FFImageLoading.Forms.csproj @@ -0,0 +1,122 @@ + + + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40;uap10.0.16299;net472 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40 + + + + netstandard2.0;monoandroid90; + netstandard2.0;uap10.0.16299 + netstandard2.0;xamarin.ios10 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10 + + + + FFImageLoading.Forms + FFImageLoading.Forms + Xamarin.FFImageLoading.Forms + Xamarin library to load images quickly and easily on Xamarin.iOS / Xamarin.Android / Xamarin.Mac / Windows + true + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FFImageLoading.Forms/readme.txt b/FFImageLoading.Forms/readme.txt new file mode 100644 index 000000000..4fbcf6a53 --- /dev/null +++ b/FFImageLoading.Forms/readme.txt @@ -0,0 +1,10 @@ +--------------------------------- +FFImageLoading +--------------------------------- + +TODO: getting started here + + +--------------------------------- +Star on Github if this project helps you: https://github.com/luberda-molinet/FFImageLoading +--------------------------------- \ No newline at end of file diff --git a/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj b/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj new file mode 100644 index 000000000..18495b0b0 --- /dev/null +++ b/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj @@ -0,0 +1,122 @@ + + + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40;uap10.0.16299;net472 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40 + + + + netstandard2.0;monoandroid90; + netstandard2.0;uap10.0.16299 + netstandard2.0;xamarin.ios10 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10 + + + + FFImageLoading.Svg + FFImageLoading.Svg + Xamarin.FFImageLoading.Svg + Xamarin library to load images quickly and easily on Xamarin.iOS / Xamarin.Android / Xamarin.Mac / Windows + true + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FFImageLoading.MvvmCross/readme.txt b/FFImageLoading.MvvmCross/readme.txt new file mode 100644 index 000000000..4fbcf6a53 --- /dev/null +++ b/FFImageLoading.MvvmCross/readme.txt @@ -0,0 +1,10 @@ +--------------------------------- +FFImageLoading +--------------------------------- + +TODO: getting started here + + +--------------------------------- +Star on Github if this project helps you: https://github.com/luberda-molinet/FFImageLoading +--------------------------------- \ No newline at end of file diff --git a/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj b/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj new file mode 100644 index 000000000..63b7e5863 --- /dev/null +++ b/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj @@ -0,0 +1,122 @@ + + + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40;uap10.0.16299;net472 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40 + + + + netstandard2.0;monoandroid90; + netstandard2.0;uap10.0.16299 + netstandard2.0;xamarin.ios10 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10 + + + + FFImageLoading.Svg.Forms + FFImageLoading.Svg.Forms + Xamarin.FFImageLoading.Svg.Forms + Xamarin library to load images quickly and easily on Xamarin.iOS / Xamarin.Android / Xamarin.Mac / Windows + true + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FFImageLoading.Svg.Forms/readme.txt b/FFImageLoading.Svg.Forms/readme.txt new file mode 100644 index 000000000..4fbcf6a53 --- /dev/null +++ b/FFImageLoading.Svg.Forms/readme.txt @@ -0,0 +1,10 @@ +--------------------------------- +FFImageLoading +--------------------------------- + +TODO: getting started here + + +--------------------------------- +Star on Github if this project helps you: https://github.com/luberda-molinet/FFImageLoading +--------------------------------- \ No newline at end of file diff --git a/FFImageLoading.Svg/FFImageLoading.Svg.csproj b/FFImageLoading.Svg/FFImageLoading.Svg.csproj new file mode 100644 index 000000000..18495b0b0 --- /dev/null +++ b/FFImageLoading.Svg/FFImageLoading.Svg.csproj @@ -0,0 +1,122 @@ + + + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40;uap10.0.16299;net472 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40 + + + + netstandard2.0;monoandroid90; + netstandard2.0;uap10.0.16299 + netstandard2.0;xamarin.ios10 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10 + + + + FFImageLoading.Svg + FFImageLoading.Svg + Xamarin.FFImageLoading.Svg + Xamarin library to load images quickly and easily on Xamarin.iOS / Xamarin.Android / Xamarin.Mac / Windows + true + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FFImageLoading.Svg/readme.txt b/FFImageLoading.Svg/readme.txt new file mode 100644 index 000000000..4fbcf6a53 --- /dev/null +++ b/FFImageLoading.Svg/readme.txt @@ -0,0 +1,10 @@ +--------------------------------- +FFImageLoading +--------------------------------- + +TODO: getting started here + + +--------------------------------- +Star on Github if this project helps you: https://github.com/luberda-molinet/FFImageLoading +--------------------------------- \ No newline at end of file diff --git a/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj b/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj new file mode 100644 index 000000000..e04806af7 --- /dev/null +++ b/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj @@ -0,0 +1,122 @@ + + + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40;uap10.0.16299;net472 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40 + + + + netstandard2.0;monoandroid90; + netstandard2.0;uap10.0.16299 + netstandard2.0;xamarin.ios10 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10 + + + + FFImageLoading.Transformations + FFImageLoading.Transformations + Xamarin.FFImageLoading.Transformations + Xamarin library to load images quickly and easily on Xamarin.iOS / Xamarin.Android / Xamarin.Mac / Windows + true + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/FFImageLoading.Transformations/readme.txt b/FFImageLoading.Transformations/readme.txt new file mode 100644 index 000000000..4fbcf6a53 --- /dev/null +++ b/FFImageLoading.Transformations/readme.txt @@ -0,0 +1,10 @@ +--------------------------------- +FFImageLoading +--------------------------------- + +TODO: getting started here + + +--------------------------------- +Star on Github if this project helps you: https://github.com/luberda-molinet/FFImageLoading +--------------------------------- \ No newline at end of file diff --git a/FFImageLoading.sln b/FFImageLoading.sln index 41c71ac41..effd58f55 100644 --- a/FFImageLoading.sln +++ b/FFImageLoading.sln @@ -1,17 +1,13 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27004.2002 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29318.209 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading", "source\FFImageLoading.Common\FFImageLoading.csproj", "{51CA3BE2-DF00-4F49-8054-E5C776992B61}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Shared", "source\FFImageLoading.Shared\FFImageLoading.Shared.shproj", "{E72AC4ED-03A8-465C-95A2-38B0544B37DB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Droid", "source\FFImageLoading.Droid\FFImageLoading.Droid.csproj", "{74BF9402-3E13-4003-8923-BC20A1294CE2}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Touch", "source\FFImageLoading.Touch\FFImageLoading.Touch.csproj", "{1597F7D4-432C-4F26-B508-0F6FAF0B9711}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{B48F3C95-B33F-4EF5-B223-06356D749A80}" + ProjectSection(SolutionItems) = preProject + samples\Directory.build.props = samples\Directory.build.props + samples\Directory.build.targets = samples\Directory.build.targets + EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.Android.Sample", "samples\ImageLoading.Sample\Simple.Android.Sample.csproj", "{F898A684-E9C1-4154-9F80-6037287233F5}" EndProject @@ -19,79 +15,21 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.iOS", "samples\ImageLoading.Forms.Sample\iOS\FFImageLoading.Forms.Sample.iOS.csproj", "{626BF52A-2C8A-4E1E-AFE5-2EA3903FFBDF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample", "samples\ImageLoading.Forms.Sample\Shared\FFImageLoading.Forms.Sample.csproj", "{3A682234-5918-4F58-B02B-598A59C6A7BD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading.Forms.Sample", "samples\ImageLoading.Forms.Sample\Shared\FFImageLoading.Forms.Sample.csproj", "{3A682234-5918-4F58-B02B-598A59C6A7BD}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.Universal.Sample", "samples\Simple.WinUniversal.Sample\Simple.Universal.Sample.csproj", "{4B964916-47F4-4876-8A6B-9048B8A0D148}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.iOS.Sample", "samples\Simple.iOS.Sample\Simple.iOS.Sample.csproj", "{B67D0516-5951-4DE9-B07F-AD3407D8CA90}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Windows", "source\FFImageLoading.Windows\FFImageLoading.Windows.csproj", "{610543A5-D06F-4BCA-9443-E6ADDFF06C71}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Forms", "Forms", "{F7C14B24-556B-413B-B418-4CD194766A26}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms", "source\FFImageLoading.Forms\FFImageLoading.Forms.csproj", "{3D6C1F12-68D7-44C2-A7DE-8E7942627A01}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Droid", "source\FFImageLoading.Forms.Droid\FFImageLoading.Forms.Droid.csproj", "{7014FEB6-0338-4A47-B600-4A1B48127C5C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Touch", "source\FFImageLoading.Forms.Touch\FFImageLoading.Forms.Touch.csproj", "{1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.WinUWP", "source\FFImageLoading.Forms.WinUWP\FFImageLoading.Forms.WinUWP.csproj", "{B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Transformations", "Transformations", "{8F977FC5-CA16-4EEF-9222-2C77F88A7125}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations", "source\FFImageLoading.Transformations\FFImageLoading.Transformations.csproj", "{E68FD3BB-5851-45CC-9B33-DE6AB28B9984}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Droid", "source\FFImageLoading.Transformations.Droid\FFImageLoading.Transformations.Droid.csproj", "{BD3CEB96-93D6-47BD-9474-01DFCD320897}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Touch", "source\FFImageLoading.Transformations.Touch\FFImageLoading.Transformations.Touch.csproj", "{A19942AA-BE22-4CF5-9173-4A78D6B0EB06}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MvvmCross", "MvvmCross", "{1AFB4004-0EB7-4518-9B65-F1008B7962FC}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Cross", "source\FFImageLoading.Cross\FFImageLoading.Cross.shproj", "{3C58B37D-EDB7-4778-AA48-F3AD9A571059}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Svg", "Svg", "{EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Touch", "source\FFImageLoading.Svg.Touch\FFImageLoading.Svg.Touch.csproj", "{AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Droid", "source\FFImageLoading.Svg.Droid\FFImageLoading.Svg.Droid.csproj", "{0BF13419-BA9C-4004-812C-EB22E41927D9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms", "source\FFImageLoading.Svg.Forms\FFImageLoading.Svg.Forms.csproj", "{DE555E87-187D-4768-8053-B2D3195B6792}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Svg.Shared", "source\FFImageLoading.Svg.Shared\FFImageLoading.Svg.Shared.shproj", "{488664FA-5BC5-4868-9FC4-44DB7294EC5A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Touch", "source\FFImageLoading.Svg.Forms.Touch\FFImageLoading.Svg.Forms.Touch.csproj", "{A73A1EA8-E709-474D-9102-DCB2482950AB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Droid", "source\FFImageLoading.Svg.Forms.Droid\FFImageLoading.Svg.Forms.Droid.csproj", "{CCA629E9-55E3-414A-91AF-79A0CB845CD5}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Svg.Forms.Shared", "source\FFImageLoading.Svg.Forms.Shared\FFImageLoading.Svg.Forms.Shared.shproj", "{3F817BAD-EDFB-44E3-A9EF-1FDED55ED787}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg", "source\FFImageLoading.Svg\FFImageLoading.Svg.csproj", "{E5C8FBB7-595D-43FE-B900-46027D0D4F69}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Windows", "source\FFImageLoading.Svg.Windows\FFImageLoading.Svg.Windows.csproj", "{5140739D-209C-41A7-9503-5D5733F4C091}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Windows", "source\FFImageLoading.Svg.Forms.Windows\FFImageLoading.Svg.Forms.Windows.csproj", "{6D4F9DFA-012E-4966-A6E8-01C3464B537E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{A420B061-9AF1-40EC-A728-60536C59031E}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.MvvmCross.Sample.Core", "samples\ImageLoading.MvvmCross.Sample\FFImageLoading.MvvmCross.Sample.Core\FFImageLoading.MvvmCross.Sample.Core.csproj", "{087DE224-30F0-4FEF-A960-F93F04182BA6}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.MvvmCross.Sample.Droid", "samples\ImageLoading.MvvmCross.Sample\FFImageLoading.MvvmCross.Sample.Droid\FFImageLoading.MvvmCross.Sample.Droid.csproj", "{A3760566-B91D-435F-94A6-31ADF4C7812F}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Cross.Svg", "source\FFImageLoading.Cross.Svg\FFImageLoading.Cross.Svg.shproj", "{60678181-1544-4276-9B2A-6239C1046EA5}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.MvvmCross.Sample.iOS", "samples\ImageLoading.MvvmCross.Sample\FFImageLoading.MvvmCross.Sample.iOS\FFImageLoading.MvvmCross.Sample.iOS.csproj", "{8701A65C-0F63-4BE7-B3F7-D2365BB6366E}" EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FFImageLoading.Shared.IosMac", "source\FFImageLoading.Shared.IosMac\FFImageLoading.Shared.IosMac.shproj", "{26F4DB3B-EC7F-46DE-8D51-2CB4BA187A16}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Mac", "source\FFImageLoading.Forms.Mac\FFImageLoading.Forms.Mac.csproj", "{EC240D61-70B0-4561-BB43-F8FB8FD11BF2}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Mac", "samples\ImageLoading.Forms.Sample\Mac\FFImageLoading.Forms.Sample.Mac.csproj", "{75D24499-446D-47DD-9C9A-295E40010CF1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Tests", "source\Tests\FFImageLoading.Tests\FFImageLoading.Tests.csproj", "{844EF512-7E52-4515-AC00-5FF50800F2B5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Mock", "source\FFImageLoading.Mock\FFImageLoading.Mock.csproj", "{32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Mac", "source\FFImageLoading.Mac\FFImageLoading.Mac.csproj", "{91825F9F-8F2D-4848-8375-68FCAA8C0DC6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading.Tests", "source\Tests\FFImageLoading.Tests\FFImageLoading.Tests.csproj", "{844EF512-7E52-4515-AC00-5FF50800F2B5}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Nuspec", "Nuspec", "{5C360F03-BA00-4697-B698-73682B8F510F}" ProjectSection(SolutionItems) = preProject @@ -102,58 +40,26 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Nuspec", "Nuspec", "{5C360F nuget\Xamarin.FFImageLoading.Transformations.nuspec = nuget\Xamarin.FFImageLoading.Transformations.nuspec EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Mac", "source\FFImageLoading.Transformations.Mac\FFImageLoading.Transformations.Mac.csproj", "{CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Tizen", "source\FFImageLoading.Forms.Tizen\FFImageLoading.Forms.Tizen.csproj", "{FF334AE1-1B61-4979-8C8E-FD486B246859}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Tizen", "source\FFImageLoading.Transformations.Tizen\FFImageLoading.Transformations.Tizen.csproj", "{CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Tizen", "source\FFImageLoading.Svg.Tizen\FFImageLoading.Svg.Tizen.csproj", "{B27E52FA-74DC-42C7-ACBC-5A893271AFFE}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Tizen", "source\FFImageLoading.Svg.Forms.Tizen\FFImageLoading.Svg.Forms.Tizen.csproj", "{CB1F7760-C8A6-40A3-9B90-F05628B62C2D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading.Forms.Sample.Tizen", "samples\ImageLoading.Forms.Sample\Tizen\FFImageLoading.Forms.Sample.Tizen.csproj", "{26980B5F-05B3-4070-A2A7-28749166E44C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Tizen", "source\FFImageLoading.Tizen\FFImageLoading.Tizen.csproj", "{DCC22B65-C384-4101-B61B-1A8515D68F06}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Mac", "source\FFImageLoading.Svg.Mac\FFImageLoading.Svg.Mac.csproj", "{EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Svg.Forms.Mac", "source\FFImageLoading.Svg.Forms.Mac\FFImageLoading.Svg.Forms.Mac.csproj", "{411B82F4-4F6B-49A0-8E28-260FB65B386F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Mock", "source\FFImageLoading.Forms.Mock\FFImageLoading.Forms.Mock.csproj", "{957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Windows", "source\FFImageLoading.Transformations.Windows\FFImageLoading.Transformations.Windows.csproj", "{399E7E28-5A3D-471F-B6FC-D5770EBB6762}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Tizen", "samples\ImageLoading.Forms.Sample\Tizen\FFImageLoading.Forms.Sample.Tizen.csproj", "{26980B5F-05B3-4070-A2A7-28749166E44C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple.TizenForms.Sample", "samples\Simple.TizenForms.Sample\Simple.TizenForms.Sample.csproj", "{01B928BA-5E3B-46C6-B172-624A60ECC534}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Simple.TizenForms.Sample", "samples\Simple.TizenForms.Sample\Simple.TizenForms.Sample.csproj", "{01B928BA-5E3B-46C6-B172-624A60ECC534}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Mac.Sample", "samples\FFImageLoading.Mac.Sample\FFImageLoading.Mac.Sample.csproj", "{8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.WinUWP", "samples\ImageLoading.Forms.Sample\WinUWP\FFImageLoading.Forms.Sample.WinUWP.csproj", "{8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Wpf", "source\FFImageLoading.Forms.Wpf\FFImageLoading.Forms.Wpf.csproj", "{0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Transformations.Wpf", "source\FFImageLoading.Transformations.Wpf\FFImageLoading.Transformations.Wpf.csproj", "{A63B1175-5FB5-4A9C-BCC5-8AC091876D04}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Wpf", "source\FFImageLoading.Wpf\FFImageLoading.Wpf.csproj", "{DC06C582-6C7E-4018-A752-FEB528C65F7E}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading.Forms.Sample.Wpf", "samples\ImageLoading.Forms.Sample\Wpf\FFImageLoading.Forms.Sample.Wpf.csproj", "{9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionItems", "SolutionItems", "{D3951530-EEDE-4F9C-BACC-0DEF2BDB879D}" + ProjectSection(SolutionItems) = preProject + build.cake = build.cake + Directory.build.props = Directory.build.props + Directory.build.targets = Directory.build.targets + global.json = global.json + README.md = README.md + EndProjectSection +EndProject Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - source\FFImageLoading.Cross\FFImageLoading.Cross.projitems*{1597f7d4-432c-4f26-b508-0f6faf0b9711}*SharedItemsImports = 4 - source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{1597f7d4-432c-4f26-b508-0f6faf0b9711}*SharedItemsImports = 4 - source\FFImageLoading.Shared.IosMac\FFImageLoading.Shared.IosMac.projitems*{26f4db3b-ec7f-46de-8d51-2cb4ba187a16}*SharedItemsImports = 13 - source\FFImageLoading.Cross\FFImageLoading.Cross.projitems*{3c58b37d-edb7-4778-aa48-f3ad9a571059}*SharedItemsImports = 13 - source\FFImageLoading.Svg.Forms.Shared\FFImageLoading.Svg.Forms.Shared.projitems*{3f817bad-edfb-44e3-a9ef-1fded55ed787}*SharedItemsImports = 13 - source\FFImageLoading.Svg.Shared\FFImageLoading.Svg.Shared.projitems*{488664fa-5bc5-4868-9fc4-44db7294ec5a}*SharedItemsImports = 13 - source\FFImageLoading.Svg.Shared\FFImageLoading.Svg.Shared.projitems*{5140739d-209c-41a7-9503-5d5733f4c091}*SharedItemsImports = 4 - source\FFImageLoading.Cross.Svg\FFImageLoading.Cross.Svg.projitems*{60678181-1544-4276-9b2a-6239c1046ea5}*SharedItemsImports = 13 - source\FFImageLoading.Svg.Forms.Shared\FFImageLoading.Svg.Forms.Shared.projitems*{6d4f9dfa-012e-4966-a6e8-01c3464b537e}*SharedItemsImports = 4 - source\FFImageLoading.Cross\FFImageLoading.Cross.projitems*{74bf9402-3e13-4003-8923-bc20a1294ce2}*SharedItemsImports = 4 - source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{74bf9402-3e13-4003-8923-bc20a1294ce2}*SharedItemsImports = 4 - source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{dc06c582-6c7e-4018-a752-feb528c65f7e}*SharedItemsImports = 4 - source\FFImageLoading.Shared\FFImageLoading.Shared.projitems*{e72ac4ed-03a8-465c-95a2-38b0544b37db}*SharedItemsImports = 13 - EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|ARM = Debug|ARM @@ -169,78 +75,6 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|Any CPU.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|ARM.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|ARM.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|iPhone.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|x64.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|x64.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|x86.ActiveCfg = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Debug|x86.Build.0 = Debug|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|Any CPU.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|Any CPU.Build.0 = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|ARM.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|ARM.Build.0 = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|iPhone.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|iPhone.Build.0 = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|x64.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|x64.Build.0 = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|x86.ActiveCfg = Release|Any CPU - {51CA3BE2-DF00-4F49-8054-E5C776992B61}.Release|x86.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|ARM.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|ARM.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|iPhone.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|x64.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|x64.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|x86.ActiveCfg = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Debug|x86.Build.0 = Debug|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|Any CPU.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|ARM.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|ARM.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|iPhone.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|iPhone.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|x64.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|x64.Build.0 = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|x86.ActiveCfg = Release|Any CPU - {74BF9402-3E13-4003-8923-BC20A1294CE2}.Release|x86.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|ARM.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|ARM.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|iPhone.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|x64.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|x64.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|x86.ActiveCfg = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Debug|x86.Build.0 = Debug|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|Any CPU.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|ARM.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|ARM.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|iPhone.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|iPhone.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|x64.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|x64.Build.0 = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|x86.ActiveCfg = Release|Any CPU - {1597F7D4-432C-4F26-B508-0F6FAF0B9711}.Release|x86.Build.0 = Release|Any CPU {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -388,373 +222,6 @@ Global {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x64.Build.0 = Release|iPhone {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x86.ActiveCfg = Release|iPhone {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x86.Build.0 = Release|iPhone - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|Any CPU.Build.0 = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|ARM.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|x64.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Debug|x86.ActiveCfg = Debug|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|Any CPU.ActiveCfg = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|Any CPU.Build.0 = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|ARM.ActiveCfg = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|iPhone.ActiveCfg = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|x64.ActiveCfg = Release|Any CPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71}.Release|x86.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|ARM.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|ARM.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|iPhone.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|x64.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|x64.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|x86.ActiveCfg = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Debug|x86.Build.0 = Debug|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|Any CPU.Build.0 = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|ARM.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|ARM.Build.0 = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|iPhone.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|iPhone.Build.0 = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|x64.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|x64.Build.0 = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|x86.ActiveCfg = Release|Any CPU - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01}.Release|x86.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|ARM.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|ARM.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|iPhone.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|x64.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|x64.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|x86.ActiveCfg = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Debug|x86.Build.0 = Debug|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|Any CPU.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|ARM.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|ARM.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|iPhone.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|iPhone.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|x64.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|x64.Build.0 = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|x86.ActiveCfg = Release|Any CPU - {7014FEB6-0338-4A47-B600-4A1B48127C5C}.Release|x86.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|ARM.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|ARM.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|iPhone.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|x64.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|x64.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|x86.ActiveCfg = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Debug|x86.Build.0 = Debug|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|Any CPU.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|ARM.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|ARM.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|iPhone.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|iPhone.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|x64.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|x64.Build.0 = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|x86.ActiveCfg = Release|Any CPU - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC}.Release|x86.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|ARM.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|ARM.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|iPhone.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|x64.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|x64.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|x86.ActiveCfg = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Debug|x86.Build.0 = Debug|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|Any CPU.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|ARM.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|ARM.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|iPhone.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|iPhone.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|x64.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|x64.Build.0 = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|x86.ActiveCfg = Release|Any CPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659}.Release|x86.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|ARM.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|ARM.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|iPhone.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|x64.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|x64.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|x86.ActiveCfg = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Debug|x86.Build.0 = Debug|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|Any CPU.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|ARM.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|ARM.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|iPhone.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|iPhone.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|x64.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|x64.Build.0 = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|x86.ActiveCfg = Release|Any CPU - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984}.Release|x86.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|ARM.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|ARM.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|iPhone.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|x64.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|x64.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|x86.ActiveCfg = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Debug|x86.Build.0 = Debug|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|Any CPU.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|ARM.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|ARM.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|iPhone.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|iPhone.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|x64.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|x64.Build.0 = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|x86.ActiveCfg = Release|Any CPU - {BD3CEB96-93D6-47BD-9474-01DFCD320897}.Release|x86.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|ARM.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|ARM.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|iPhone.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|x64.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|x64.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|x86.ActiveCfg = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Debug|x86.Build.0 = Debug|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|Any CPU.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|ARM.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|ARM.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|iPhone.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|iPhone.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|x64.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|x64.Build.0 = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|x86.ActiveCfg = Release|Any CPU - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06}.Release|x86.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|ARM.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|ARM.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|iPhone.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|x64.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|x64.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|x86.ActiveCfg = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Debug|x86.Build.0 = Debug|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|Any CPU.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|ARM.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|ARM.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|iPhone.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|iPhone.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|x64.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|x64.Build.0 = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|x86.ActiveCfg = Release|Any CPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC}.Release|x86.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|ARM.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|ARM.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|iPhone.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|x64.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|x64.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|x86.ActiveCfg = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Debug|x86.Build.0 = Debug|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|Any CPU.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|ARM.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|ARM.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|iPhone.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|iPhone.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|x64.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|x64.Build.0 = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|x86.ActiveCfg = Release|Any CPU - {0BF13419-BA9C-4004-812C-EB22E41927D9}.Release|x86.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|ARM.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|ARM.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|iPhone.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|x64.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|x64.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|x86.ActiveCfg = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Debug|x86.Build.0 = Debug|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|Any CPU.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|ARM.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|ARM.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|iPhone.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|iPhone.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|x64.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|x64.Build.0 = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|x86.ActiveCfg = Release|Any CPU - {DE555E87-187D-4768-8053-B2D3195B6792}.Release|x86.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|ARM.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|ARM.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|iPhone.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|x64.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|x64.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|x86.ActiveCfg = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Debug|x86.Build.0 = Debug|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|Any CPU.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|ARM.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|ARM.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|iPhone.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|iPhone.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|x64.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|x64.Build.0 = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|x86.ActiveCfg = Release|Any CPU - {A73A1EA8-E709-474D-9102-DCB2482950AB}.Release|x86.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|ARM.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|iPhone.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|x64.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|x64.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|x86.ActiveCfg = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Debug|x86.Build.0 = Debug|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|Any CPU.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|ARM.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|ARM.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|iPhone.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|iPhone.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|x64.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|x64.Build.0 = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|x86.ActiveCfg = Release|Any CPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5}.Release|x86.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|ARM.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|ARM.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|iPhone.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|x64.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|x64.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|x86.ActiveCfg = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Debug|x86.Build.0 = Debug|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|Any CPU.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|ARM.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|ARM.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|iPhone.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|iPhone.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|x64.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|x64.Build.0 = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|x86.ActiveCfg = Release|Any CPU - {E5C8FBB7-595D-43FE-B900-46027D0D4F69}.Release|x86.Build.0 = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|ARM.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|iPhone.Build.0 = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|x64.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Debug|x86.ActiveCfg = Debug|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|Any CPU.Build.0 = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|ARM.ActiveCfg = Release|ARM - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|ARM.Build.0 = Release|ARM - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|iPhone.ActiveCfg = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|iPhone.Build.0 = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|x64.ActiveCfg = Release|x64 - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|x64.Build.0 = Release|x64 - {5140739D-209C-41A7-9503-5D5733F4C091}.Release|x86.ActiveCfg = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|ARM.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|iPhone.Build.0 = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|x64.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Debug|x86.ActiveCfg = Debug|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|Any CPU.Build.0 = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|ARM.ActiveCfg = Release|ARM - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|ARM.Build.0 = Release|ARM - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|iPhone.ActiveCfg = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|iPhone.Build.0 = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|x64.ActiveCfg = Release|x64 - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|x64.Build.0 = Release|x64 - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|x86.ActiveCfg = Release|Any CPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E}.Release|x86.Build.0 = Release|Any CPU {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|ARM.ActiveCfg = Debug|Any CPU {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|ARM.Build.0 = Debug|Any CPU @@ -821,30 +288,6 @@ Global {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x64.Build.0 = Release|iPhone {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x86.ActiveCfg = Release|iPhone {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Release|x86.Build.0 = Release|iPhone - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|ARM.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|ARM.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|iPhone.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|x64.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|x64.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|x86.ActiveCfg = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Debug|x86.Build.0 = Debug|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|Any CPU.Build.0 = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|ARM.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|ARM.Build.0 = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|iPhone.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|iPhone.Build.0 = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|x64.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|x64.Build.0 = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|x86.ActiveCfg = Release|Any CPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2}.Release|x86.Build.0 = Release|Any CPU {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|Any CPU.Build.0 = Debug|Any CPU {75D24499-446D-47DD-9C9A-295E40010CF1}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -892,294 +335,6 @@ Global {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x64.Build.0 = Release|Any CPU {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x86.ActiveCfg = Release|Any CPU {844EF512-7E52-4515-AC00-5FF50800F2B5}.Release|x86.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|Any CPU.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|ARM.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|ARM.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|iPhone.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|x64.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|x64.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|x86.ActiveCfg = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Debug|x86.Build.0 = Debug|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|Any CPU.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|Any CPU.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|ARM.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|ARM.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|iPhone.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|iPhone.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|x64.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|x64.Build.0 = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|x86.ActiveCfg = Release|Any CPU - {32BFDBC6-F42B-4D67-BF53-E19BB7D3A799}.Release|x86.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|ARM.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|ARM.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|iPhone.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|x64.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|x64.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|x86.ActiveCfg = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Debug|x86.Build.0 = Debug|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|Any CPU.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|ARM.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|ARM.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|iPhone.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|iPhone.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|x64.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|x64.Build.0 = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|x86.ActiveCfg = Release|Any CPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6}.Release|x86.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|ARM.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|iPhone.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|x64.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|x64.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|x86.ActiveCfg = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Debug|x86.Build.0 = Debug|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|Any CPU.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|ARM.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|ARM.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|iPhone.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|iPhone.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|x64.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|x64.Build.0 = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|x86.ActiveCfg = Release|Any CPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0}.Release|x86.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|ARM.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|ARM.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|iPhone.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|x64.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|x64.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|x86.ActiveCfg = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Debug|x86.Build.0 = Debug|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|Any CPU.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|ARM.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|ARM.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|iPhone.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|iPhone.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|x64.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|x64.Build.0 = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|x86.ActiveCfg = Release|Any CPU - {FF334AE1-1B61-4979-8C8E-FD486B246859}.Release|x86.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|ARM.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|iPhone.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|x64.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|x64.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|x86.ActiveCfg = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Debug|x86.Build.0 = Debug|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|Any CPU.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|ARM.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|ARM.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|iPhone.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|iPhone.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|x64.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|x64.Build.0 = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|x86.ActiveCfg = Release|Any CPU - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9}.Release|x86.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|ARM.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|ARM.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|iPhone.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|x64.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|x64.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|x86.ActiveCfg = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Debug|x86.Build.0 = Debug|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|Any CPU.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|ARM.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|ARM.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|iPhone.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|iPhone.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|x64.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|x64.Build.0 = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|x86.ActiveCfg = Release|Any CPU - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE}.Release|x86.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|ARM.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|ARM.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|iPhone.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|x64.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|x64.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|x86.ActiveCfg = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Debug|x86.Build.0 = Debug|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|Any CPU.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|ARM.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|ARM.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|iPhone.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|iPhone.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|x64.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|x64.Build.0 = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|x86.ActiveCfg = Release|Any CPU - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D}.Release|x86.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|ARM.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|ARM.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|iPhone.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|x64.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|x64.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|x86.ActiveCfg = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Debug|x86.Build.0 = Debug|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|Any CPU.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|ARM.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|ARM.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|iPhone.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|iPhone.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|x64.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|x64.Build.0 = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|x86.ActiveCfg = Release|Any CPU - {DCC22B65-C384-4101-B61B-1A8515D68F06}.Release|x86.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|ARM.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|ARM.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|iPhone.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|x64.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|x64.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|x86.ActiveCfg = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Debug|x86.Build.0 = Debug|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|Any CPU.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|ARM.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|ARM.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|iPhone.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|iPhone.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|x64.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|x64.Build.0 = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|x86.ActiveCfg = Release|Any CPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3}.Release|x86.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|ARM.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|ARM.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|iPhone.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|x64.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|x64.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|x86.ActiveCfg = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Debug|x86.Build.0 = Debug|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|Any CPU.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|ARM.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|ARM.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|iPhone.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|iPhone.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|x64.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|x64.Build.0 = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|x86.ActiveCfg = Release|Any CPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F}.Release|x86.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|ARM.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|ARM.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|iPhone.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|x64.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|x64.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|x86.ActiveCfg = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Debug|x86.Build.0 = Debug|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|Any CPU.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|ARM.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|ARM.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|iPhone.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|iPhone.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|x64.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|x64.Build.0 = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|x86.ActiveCfg = Release|Any CPU - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4}.Release|x86.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|Any CPU.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|ARM.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|ARM.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|iPhone.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|x64.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|x64.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|x86.ActiveCfg = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Debug|x86.Build.0 = Debug|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|Any CPU.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|Any CPU.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|ARM.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|ARM.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|iPhone.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|iPhone.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|x64.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|x64.Build.0 = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|x86.ActiveCfg = Release|Any CPU - {399E7E28-5A3D-471F-B6FC-D5770EBB6762}.Release|x86.Build.0 = Release|Any CPU {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|Any CPU.Build.0 = Debug|Any CPU {26980B5F-05B3-4070-A2A7-28749166E44C}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -1274,78 +429,6 @@ Global {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.ActiveCfg = Release|x86 {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.Build.0 = Release|x86 {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F}.Release|x86.Deploy.0 = Release|x86 - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|ARM.ActiveCfg = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|ARM.Build.0 = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhone.Build.0 = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x64.ActiveCfg = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x64.Build.0 = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x86.ActiveCfg = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Debug|x86.Build.0 = Debug|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|Any CPU.Build.0 = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|ARM.ActiveCfg = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|ARM.Build.0 = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhone.ActiveCfg = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhone.Build.0 = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x64.ActiveCfg = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x64.Build.0 = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x86.ActiveCfg = Release|Any CPU - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5}.Release|x86.Build.0 = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|ARM.ActiveCfg = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|ARM.Build.0 = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhone.Build.0 = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x64.ActiveCfg = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x64.Build.0 = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x86.ActiveCfg = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Debug|x86.Build.0 = Debug|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|Any CPU.Build.0 = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|ARM.ActiveCfg = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|ARM.Build.0 = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhone.ActiveCfg = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhone.Build.0 = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x64.ActiveCfg = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x64.Build.0 = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x86.ActiveCfg = Release|Any CPU - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04}.Release|x86.Build.0 = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|ARM.ActiveCfg = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|ARM.Build.0 = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhone.ActiveCfg = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhone.Build.0 = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x64.ActiveCfg = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x64.Build.0 = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x86.ActiveCfg = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Debug|x86.Build.0 = Debug|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|Any CPU.Build.0 = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|ARM.ActiveCfg = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|ARM.Build.0 = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhone.ActiveCfg = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhone.Build.0 = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x64.ActiveCfg = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x64.Build.0 = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x86.ActiveCfg = Release|Any CPU - {DC06C582-6C7E-4018-A752-FEB528C65F7E}.Release|x86.Build.0 = Release|Any CPU {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|Any CPU.Build.0 = Debug|Any CPU {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -1381,46 +464,14 @@ Global {3A682234-5918-4F58-B02B-598A59C6A7BD} = {B48F3C95-B33F-4EF5-B223-06356D749A80} {4B964916-47F4-4876-8A6B-9048B8A0D148} = {B48F3C95-B33F-4EF5-B223-06356D749A80} {B67D0516-5951-4DE9-B07F-AD3407D8CA90} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} = {F7C14B24-556B-413B-B418-4CD194766A26} - {7014FEB6-0338-4A47-B600-4A1B48127C5C} = {F7C14B24-556B-413B-B418-4CD194766A26} - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC} = {F7C14B24-556B-413B-B418-4CD194766A26} - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659} = {F7C14B24-556B-413B-B418-4CD194766A26} - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {BD3CEB96-93D6-47BD-9474-01DFCD320897} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {3C58B37D-EDB7-4778-AA48-F3AD9A571059} = {1AFB4004-0EB7-4518-9B65-F1008B7962FC} - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {0BF13419-BA9C-4004-812C-EB22E41927D9} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {DE555E87-187D-4768-8053-B2D3195B6792} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {488664FA-5BC5-4868-9FC4-44DB7294EC5A} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {A73A1EA8-E709-474D-9102-DCB2482950AB} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {CCA629E9-55E3-414A-91AF-79A0CB845CD5} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {3F817BAD-EDFB-44E3-A9EF-1FDED55ED787} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {E5C8FBB7-595D-43FE-B900-46027D0D4F69} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {5140739D-209C-41A7-9503-5D5733F4C091} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {6D4F9DFA-012E-4966-A6E8-01C3464B537E} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} {087DE224-30F0-4FEF-A960-F93F04182BA6} = {B48F3C95-B33F-4EF5-B223-06356D749A80} {A3760566-B91D-435F-94A6-31ADF4C7812F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {60678181-1544-4276-9B2A-6239C1046EA5} = {1AFB4004-0EB7-4518-9B65-F1008B7962FC} {8701A65C-0F63-4BE7-B3F7-D2365BB6366E} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2} = {F7C14B24-556B-413B-B418-4CD194766A26} {75D24499-446D-47DD-9C9A-295E40010CF1} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {844EF512-7E52-4515-AC00-5FF50800F2B5} = {A420B061-9AF1-40EC-A728-60536C59031E} - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {FF334AE1-1B61-4979-8C8E-FD486B246859} = {F7C14B24-556B-413B-B418-4CD194766A26} - {CA4E6EF4-36C8-4347-A8A9-A1540C837AB9} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} - {B27E52FA-74DC-42C7-ACBC-5A893271AFFE} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {CB1F7760-C8A6-40A3-9B90-F05628B62C2D} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {411B82F4-4F6B-49A0-8E28-260FB65B386F} = {EDE40129-FB1D-40C5-A0C2-B344A1ED3D2D} - {957F1B47-0ADC-4BFE-AB87-8D0FBFB59BC4} = {F7C14B24-556B-413B-B418-4CD194766A26} - {399E7E28-5A3D-471F-B6FC-D5770EBB6762} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} {26980B5F-05B3-4070-A2A7-28749166E44C} = {B48F3C95-B33F-4EF5-B223-06356D749A80} {01B928BA-5E3B-46C6-B172-624A60ECC534} = {B48F3C95-B33F-4EF5-B223-06356D749A80} {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B} = {B48F3C95-B33F-4EF5-B223-06356D749A80} {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} - {0AA5A427-ADC8-4685-AA8C-FEA26EBD31F5} = {F7C14B24-556B-413B-B418-4CD194766A26} - {A63B1175-5FB5-4A9C-BCC5-8AC091876D04} = {8F977FC5-CA16-4EEF-9222-2C77F88A7125} {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F} = {B48F3C95-B33F-4EF5-B223-06356D749A80} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution diff --git a/samples/FFImageLoading.Mac.Sample/FFImageLoading.Mac.Sample.csproj b/samples/FFImageLoading.Mac.Sample/FFImageLoading.Mac.Sample.csproj index e19c816d6..67e8b649e 100644 --- a/samples/FFImageLoading.Mac.Sample/FFImageLoading.Mac.Sample.csproj +++ b/samples/FFImageLoading.Mac.Sample/FFImageLoading.Mac.Sample.csproj @@ -1,101 +1,94 @@ - - - - Debug - AnyCPU - {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B} - {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Exe - FFImageLoading.Mac.Sample - FFImageLoading.Mac.Sample - v2.0 - Xamarin.Mac - Resources - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - false - Mac Developer - false - false - false - true - true - HttpClientHandler - None - - None - - - pdbonly - true - bin\Release - - prompt - 4 - false - true - false - true - true - true - SdkOnly - HttpClientHandler - - None - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ViewController.cs - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6} - FFImageLoading.Mac - - - + + + + Debug + AnyCPU + {8A21BBDD-F3BA-4966-8E5F-A65D4EAE7F2B} + {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Exe + FFImageLoading.Mac.Sample + FFImageLoading.Mac.Sample + v2.0 + Xamarin.Mac + Resources + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + false + Mac Developer + false + false + false + true + true + HttpClientHandler + None + + + None + + + pdbonly + true + bin\Release + + + prompt + 4 + false + true + false + true + true + true + SdkOnly + HttpClientHandler + + + None + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ViewController.cs + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Droid/FFImageLoading.Forms.Sample.Droid.csproj b/samples/ImageLoading.Forms.Sample/Droid/FFImageLoading.Forms.Sample.Droid.csproj index 9e69cbe8d..70fe126d1 100644 --- a/samples/ImageLoading.Forms.Sample/Droid/FFImageLoading.Forms.Sample.Droid.csproj +++ b/samples/ImageLoading.Forms.Sample/Droid/FFImageLoading.Forms.Sample.Droid.csproj @@ -1,314 +1,283 @@ - - - - - Debug - AnyCPU - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {9F816002-DBA1-4175-A0CA-0DFD9E086786} - Library - FFImageLoading.Forms.Sample.Droid - Assets - Resources - Resource - Resources\Resource.designer.cs - True - FFImageLoading.Forms.Sample.Droid - Properties\AndroidManifest.xml - v9.0 - 1G - - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - None - false - 1G - armeabi-v7a;x86;x86_64 - Xamarin.Android.Net.AndroidClientHandler - btls - true - - - full - true - bin\Release - prompt - 4 - false - false - 1G - Xamarin.Android.Net.AndroidClientHandler - btls - true - - - - - - - - - - ..\..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Common.dll - - - ..\..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Common.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Runtime.dll - - - ..\..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll - - - ..\..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll - - - ..\..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll - - - ..\..\..\packages\Xamarin.Android.Support.Exif.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Exif.dll - - - ..\..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Fragment.dll - - - ..\..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Media.Compat.dll - - - ..\..\..\packages\Xamarin.Android.Support.Transition.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Transition.dll - - - ..\..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v4.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.CardView.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.Palette.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.Palette.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll - - - ..\..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Vector.Drawable.dll - - - ..\..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Animated.Vector.Drawable.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.AppCompat.dll - - - ..\..\..\packages\Xamarin.Android.Support.Design.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Design.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.MediaRouter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.MediaRouter.dll - - - ..\..\..\packages\SkiaSharp.1.68.0\lib\MonoAndroid\SkiaSharp.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Core.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Forms.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\FormsViewGroup.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Core.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Platform.Android.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Platform.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Xaml.dll - - - - ..\..\..\packages\Xamarin.Android.Arch.Core.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Runtime.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.Core.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.Core.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll - - - ..\..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll - - - ..\..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll - - - ..\..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll - - - ..\..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll - - - ..\..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll - - - ..\..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll - - - ..\..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll - - - ..\..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll - - - ..\..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll - - - ..\..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll - - - ..\..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll - - - ..\..\..\packages\Xamarin.Android.Support.CustomTabs.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomTabs.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {3A682234-5918-4F58-B02B-598A59C6A7BD} - FFImageLoading.Forms.Sample - - - {7014FEB6-0338-4A47-B600-4A1B48127C5C} - FFImageLoading.Forms.Droid - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {BD3CEB96-93D6-47BD-9474-01DFCD320897} - FFImageLoading.Transformations.Droid - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {74BF9402-3E13-4003-8923-BC20A1294CE2} - FFImageLoading.Droid - - - {0BF13419-BA9C-4004-812C-EB22E41927D9} - FFImageLoading.Svg.Droid - - - {CCA629E9-55E3-414A-91AF-79A0CB845CD5} - FFImageLoading.Svg.Forms.Droid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Debug + AnyCPU + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {9F816002-DBA1-4175-A0CA-0DFD9E086786} + Library + FFImageLoading.Forms.Sample.Droid + Assets + Resources + Resource + Resources\Resource.designer.cs + True + FFImageLoading.Forms.Sample.Droid + Properties\AndroidManifest.xml + v9.0 + 1G + + + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + None + false + 1G + armeabi-v7a;x86;x86_64 + Xamarin.Android.Net.AndroidClientHandler + btls + true + + + full + true + bin\Release + prompt + 4 + false + false + 1G + Xamarin.Android.Net.AndroidClientHandler + btls + true + + + + + + + + + + ..\..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Common.dll + + + ..\..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll + + + ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Common.dll + + + ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Runtime.dll + + + ..\..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll + + + ..\..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll + + + ..\..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll + + + ..\..\..\packages\Xamarin.Android.Support.Exif.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Exif.dll + + + ..\..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Fragment.dll + + + ..\..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Media.Compat.dll + + + ..\..\..\packages\Xamarin.Android.Support.Transition.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Transition.dll + + + ..\..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v4.dll + + + ..\..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.CardView.dll + + + ..\..\..\packages\Xamarin.Android.Support.v7.Palette.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.Palette.dll + + + ..\..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll + + + ..\..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Vector.Drawable.dll + + + ..\..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Animated.Vector.Drawable.dll + + + ..\..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.AppCompat.dll + + + ..\..\..\packages\Xamarin.Android.Support.Design.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Design.dll + + + ..\..\..\packages\Xamarin.Android.Support.v7.MediaRouter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.MediaRouter.dll + + + ..\..\..\packages\SkiaSharp.1.68.0\lib\MonoAndroid\SkiaSharp.dll + + + ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Core.dll + + + ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Forms.dll + + + ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\FormsViewGroup.dll + + + ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Core.dll + + + ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Platform.Android.dll + + + ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Platform.dll + + + ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Xaml.dll + + + + ..\..\..\packages\Xamarin.Android.Arch.Core.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Runtime.dll + + + ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.Core.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.Core.dll + + + ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.dll + + + ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll + + + ..\..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll + + + ..\..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll + + + ..\..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll + + + ..\..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll + + + ..\..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll + + + ..\..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll + + + ..\..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll + + + ..\..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll + + + ..\..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll + + + ..\..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll + + + ..\..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll + + + ..\..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll + + + ..\..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll + + + ..\..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll + + + ..\..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll + + + ..\..\..\packages\Xamarin.Android.Support.CustomTabs.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomTabs.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {3A682234-5918-4F58-B02B-598A59C6A7BD} + FFImageLoading.Forms.Sample + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Mac/FFImageLoading.Forms.Sample.Mac.csproj b/samples/ImageLoading.Forms.Sample/Mac/FFImageLoading.Forms.Sample.Mac.csproj index 1b5f38b00..771a699da 100644 --- a/samples/ImageLoading.Forms.Sample/Mac/FFImageLoading.Forms.Sample.Mac.csproj +++ b/samples/ImageLoading.Forms.Sample/Mac/FFImageLoading.Forms.Sample.Mac.csproj @@ -1,162 +1,138 @@ - - - - - Debug - AnyCPU - {75D24499-446D-47DD-9C9A-295E40010CF1} - {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Exe - FFImageLoading.Forms.Sample.Mac - FFImageLoading.Forms.Sample.Mac - v2.0 - Xamarin.Mac - Resources - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - false - Mac Developer - false - false - false - true - true - - - - 3rd Party Mac Developer Installer - None - - - pdbonly - true - bin\Release - - prompt - 4 - false - true - false - true - true - true - SdkOnly - - - None - - - - - - - ..\..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.Mac20\WebP.Mac.dll - - - ..\..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.Mac20\SkiaSharp.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Core.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Forms.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Core.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.macOS.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Xaml.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ViewController.cs - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2} - FFImageLoading.Forms.Mac - - - {3A682234-5918-4F58-B02B-598A59C6A7BD} - FFImageLoading.Forms.Sample - - - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6} - FFImageLoading.Mac - - - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0} - FFImageLoading.Transformations.Mac - - - {411B82F4-4F6B-49A0-8E28-260FB65B386F} - FFImageLoading.Svg.Forms.Mac - - - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3} - FFImageLoading.Svg.Mac - - - - - - - - - - - - - + + + + + Debug + AnyCPU + {75D24499-446D-47DD-9C9A-295E40010CF1} + {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Exe + FFImageLoading.Forms.Sample.Mac + FFImageLoading.Forms.Sample.Mac + v2.0 + Xamarin.Mac + Resources + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + false + Mac Developer + false + false + false + true + true + + + + + + + 3rd Party Mac Developer Installer + None + + + pdbonly + true + bin\Release + + + prompt + 4 + false + true + false + true + true + true + SdkOnly + + + + + None + + + + + + + ..\..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.Mac20\WebP.Mac.dll + + + ..\..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.Mac20\SkiaSharp.dll + + + ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Core.dll + + + ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Forms.dll + + + ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Core.dll + + + ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.dll + + + ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.macOS.dll + + + ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Xaml.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + ViewController.cs + + + + + + + + {3A682234-5918-4F58-B02B-598A59C6A7BD} + FFImageLoading.Forms.Sample + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Shared/FFImageLoading.Forms.Sample.csproj b/samples/ImageLoading.Forms.Sample/Shared/FFImageLoading.Forms.Sample.csproj index a829e9662..2a38265b0 100644 --- a/samples/ImageLoading.Forms.Sample/Shared/FFImageLoading.Forms.Sample.csproj +++ b/samples/ImageLoading.Forms.Sample/Shared/FFImageLoading.Forms.Sample.csproj @@ -22,15 +22,6 @@ - - - - - - - - - diff --git a/samples/ImageLoading.Forms.Sample/Tizen/FFImageLoading.Forms.Sample.Tizen.csproj b/samples/ImageLoading.Forms.Sample/Tizen/FFImageLoading.Forms.Sample.Tizen.csproj index fe5a05051..8837c2bc1 100644 --- a/samples/ImageLoading.Forms.Sample/Tizen/FFImageLoading.Forms.Sample.Tizen.csproj +++ b/samples/ImageLoading.Forms.Sample/Tizen/FFImageLoading.Forms.Sample.Tizen.csproj @@ -15,13 +15,6 @@ - - - - - - - diff --git a/samples/ImageLoading.Forms.Sample/WinUWP/FFImageLoading.Forms.Sample.WinUWP.csproj b/samples/ImageLoading.Forms.Sample/WinUWP/FFImageLoading.Forms.Sample.WinUWP.csproj index d6f3a2074..5e98bc1e7 100644 --- a/samples/ImageLoading.Forms.Sample/WinUWP/FFImageLoading.Forms.Sample.WinUWP.csproj +++ b/samples/ImageLoading.Forms.Sample/WinUWP/FFImageLoading.Forms.Sample.WinUWP.csproj @@ -1,195 +1,167 @@ - - - - - Debug - x86 - {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F} - AppContainerExe - Properties - WinUWP - WinUWP - en-US - UAP - 10.0.17134.0 - 10.0.17134.0 - 14 - 512 - {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - true - WinUWP_TemporaryKey.pfx - - - true - bin\x86\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - ;2008 - full - x86 - false - prompt - true - - - bin\x86\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - true - ;2008 - pdbonly - x86 - false - prompt - true - true - - - true - bin\ARM\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - ;2008 - full - ARM - false - prompt - true - - - bin\ARM\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - true - ;2008 - pdbonly - ARM - false - prompt - true - true - - - true - bin\x64\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - ;2008 - full - x64 - false - prompt - true - - - bin\x64\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - true - ;2008 - pdbonly - x64 - false - prompt - true - true - - - PackageReference - - - - App.xaml - - - MainPage.xaml - - - - - - Designer - - - - - - - - - - - - - - - - - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - - - 6.1.5 - - - 1.68.0 - - - 3.6.0.344457 - - - 1.0.5 - - - - - {51ca3be2-df00-4f49-8054-e5c776992b61} - FFImageLoading - - - {b8be9fe7-2d07-40b5-8dae-ba52f944c659} - FFImageLoading.Forms.WinUWP - - - {3d6c1f12-68d7-44c2-a7de-8e7942627a01} - FFImageLoading.Forms - - - {6d4f9dfa-012e-4966-a6e8-01c3464b537e} - FFImageLoading.Svg.Forms.Windows - - - {5140739d-209c-41a7-9503-5d5733f4c091} - FFImageLoading.Svg.Windows - - - {399e7e28-5a3d-471f-b6fc-d5770ebb6762} - FFImageLoading.Transformations.Windows - - - {610543a5-d06f-4bca-9443-e6addff06c71} - FFImageLoading.Windows - - - {3a682234-5918-4f58-b02b-598a59c6a7bd} - FFImageLoading.Forms.Sample - - - - 14.0 - - - - - - - + + + + + Debug + x86 + {8E16617A-EA87-4E8D-8CD1-AD5E6D73188F} + AppContainerExe + Properties + WinUWP + WinUWP + en-US + UAP + 10.0.17134.0 + 10.0.17134.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + true + WinUWP_TemporaryKey.pfx + + + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x86 + false + prompt + true + true + + + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM + false + prompt + true + + + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM + false + prompt + true + true + + + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x64 + false + prompt + true + true + + + PackageReference + + + + App.xaml + + + MainPage.xaml + + + + + + Designer + + + + + + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + + + 6.1.5 + + + 1.68.0 + + + 3.6.0.344457 + + + 1.0.5 + + + + + {3a682234-5918-4f58-b02b-598a59c6a7bd} + FFImageLoading.Forms.Sample + + + + 14.0 + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj b/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj index 37be0743b..4630d6bcb 100644 --- a/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj +++ b/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj @@ -103,26 +103,6 @@ - - {51ca3be2-df00-4f49-8054-e5c776992b61} - FFImageLoading - - - {0aa5a427-adc8-4685-aa8c-fea26ebd31f5} - FFImageLoading.Forms.Wpf - - - {3d6c1f12-68d7-44c2-a7de-8e7942627a01} - FFImageLoading.Forms - - - {a63b1175-5fb5-4a9c-bcc5-8ac091876d04} - FFImageLoading.Transformations.Wpf - - - {dc06c582-6c7e-4018-a752-feb528c65f7e} - FFImageLoading.Wpf - {3a682234-5918-4f58-b02b-598a59c6a7bd} FFImageLoading.Forms.Sample diff --git a/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj b/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj index 5b22e6ae0..14d9780f5 100644 --- a/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj +++ b/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj @@ -139,38 +139,7 @@ {3A682234-5918-4F58-B02B-598A59C6A7BD} FFImageLoading.Forms.Sample - - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC} - FFImageLoading.Forms.Touch - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} - FFImageLoading.Transformations.Touch - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - FFImageLoading.Touch - - - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} - FFImageLoading.Svg.Touch - - - {A73A1EA8-E709-474D-9102-DCB2482950AB} - FFImageLoading.Svg.Forms.Touch - - - - - + \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/FFImageLoading.MvvmCross.Sample.Core.csproj b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/FFImageLoading.MvvmCross.Sample.Core.csproj index 3cf21893c..6db98919e 100644 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/FFImageLoading.MvvmCross.Sample.Core.csproj +++ b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/FFImageLoading.MvvmCross.Sample.Core.csproj @@ -1,68 +1,56 @@ - - - - Debug - AnyCPU - {087DE224-30F0-4FEF-A960-F93F04182BA6} - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - true - Library - FFImageLoading.MvvmCross.Sample.Core - FFImageLoading.MvvmCross.Sample.Core - v4.5 - Profile111 - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - - - true - bin\Release - prompt - 4 - - - - - - - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {E68FD3BB-5851-45CC-9B33-DE6AB28B9984} - FFImageLoading.Transformations - - - - - ..\..\..\packages\MvvmCross.Platform.5.6.3\lib\portable-net45+win+wpa81+wp80\MvvmCross.Platform.dll - - - ..\..\..\packages\MvvmCross.Core.5.6.3\lib\portable-net45+win+wpa81+wp80\MvvmCross.Core.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\portable-net45+win+wpa81+wp80\MvvmCross.Binding.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\portable-net45+win+wpa81+wp80\MvvmCross.Localization.dll - - - - - - + + + + Debug + AnyCPU + {087DE224-30F0-4FEF-A960-F93F04182BA6} + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + true + Library + FFImageLoading.MvvmCross.Sample.Core + FFImageLoading.MvvmCross.Sample.Core + v4.5 + Profile111 + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + + + true + bin\Release + prompt + 4 + + + + + + + + + + + + ..\..\..\packages\MvvmCross.Platform.5.6.3\lib\portable-net45+win+wpa81+wp80\MvvmCross.Platform.dll + + + ..\..\..\packages\MvvmCross.Core.5.6.3\lib\portable-net45+win+wpa81+wp80\MvvmCross.Core.dll + + + ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\portable-net45+win+wpa81+wp80\MvvmCross.Binding.dll + + + ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\portable-net45+win+wpa81+wp80\MvvmCross.Localization.dll + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/FFImageLoading.MvvmCross.Sample.Droid.csproj b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/FFImageLoading.MvvmCross.Sample.Droid.csproj index fcc68c4f0..96e45369d 100644 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/FFImageLoading.MvvmCross.Sample.Droid.csproj +++ b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/FFImageLoading.MvvmCross.Sample.Droid.csproj @@ -1,229 +1,214 @@ - - - - Debug - AnyCPU - {A3760566-B91D-435F-94A6-31ADF4C7812F} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.MvvmCross.Sample.Droid - FFImageLoading.MvvmCross.Sample.Droid - v9.0 - True - Resources\Resource.designer.cs - Resource - Properties\AndroidManifest.xml - Resources - Assets - - - true - full - false - bin\Debug - DEBUG; - prompt - 4 - None - arm64-v8a;armeabi;armeabi-v7a;x86 - - - true - pdbonly - true - bin\Release - prompt - 4 - true - false - - - - - - - - - ..\..\..\packages\MvvmCross.Platform.5.6.3\lib\MonoAndroid\MvvmCross.Platform.dll - - - ..\..\..\packages\MvvmCross.Platform.5.6.3\lib\MonoAndroid\MvvmCross.Platform.Droid.dll - - - ..\..\..\packages\MvvmCross.Core.5.6.3\lib\MonoAndroid\MvvmCross.Core.dll - - - ..\..\..\packages\MvvmCross.Core.5.6.3\lib\MonoAndroid\MvvmCross.Droid.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\MonoAndroid\MvvmCross.Binding.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\MonoAndroid\MvvmCross.Binding.Droid.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\MonoAndroid\MvvmCross.Localization.dll - - - ..\..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Common.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Common.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Runtime.dll - - - ..\..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll - - - ..\..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll - - - ..\..\..\packages\MvvmCross.Droid.Support.V7.RecyclerView.5.6.3\lib\MonoAndroid70\MvvmCross.Droid.Support.V7.RecyclerView.dll - - - - ..\..\..\packages\Xamarin.Android.Arch.Core.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Runtime.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.Core.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.Core.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll - - - ..\..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll - - - ..\..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll - - - ..\..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll - - - ..\..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll - - - ..\..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll - - - ..\..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll - - - ..\..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll - - - ..\..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll - - - ..\..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll - - - ..\..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll - - - ..\..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll - - - ..\..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {087DE224-30F0-4FEF-A960-F93F04182BA6} - FFImageLoading.MvvmCross.Sample.Core - - - {74BF9402-3E13-4003-8923-BC20A1294CE2} - FFImageLoading.Droid - - - {BD3CEB96-93D6-47BD-9474-01DFCD320897} - FFImageLoading.Transformations.Droid - - - {0BF13419-BA9C-4004-812C-EB22E41927D9} - FFImageLoading.Svg.Droid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + Debug + AnyCPU + {A3760566-B91D-435F-94A6-31ADF4C7812F} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.MvvmCross.Sample.Droid + FFImageLoading.MvvmCross.Sample.Droid + v9.0 + True + Resources\Resource.designer.cs + Resource + Properties\AndroidManifest.xml + Resources + Assets + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + None + arm64-v8a;armeabi;armeabi-v7a;x86 + + + true + pdbonly + true + bin\Release + prompt + 4 + true + false + + + + + + + + + ..\..\..\packages\MvvmCross.Platform.5.6.3\lib\MonoAndroid\MvvmCross.Platform.dll + + + ..\..\..\packages\MvvmCross.Platform.5.6.3\lib\MonoAndroid\MvvmCross.Platform.Droid.dll + + + ..\..\..\packages\MvvmCross.Core.5.6.3\lib\MonoAndroid\MvvmCross.Core.dll + + + ..\..\..\packages\MvvmCross.Core.5.6.3\lib\MonoAndroid\MvvmCross.Droid.dll + + + ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\MonoAndroid\MvvmCross.Binding.dll + + + ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\MonoAndroid\MvvmCross.Binding.Droid.dll + + + ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\MonoAndroid\MvvmCross.Localization.dll + + + ..\..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll + + + ..\..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Common.dll + + + ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Common.dll + + + ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Runtime.dll + + + ..\..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll + + + ..\..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll + + + ..\..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll + + + ..\..\..\packages\MvvmCross.Droid.Support.V7.RecyclerView.5.6.3\lib\MonoAndroid70\MvvmCross.Droid.Support.V7.RecyclerView.dll + + + + ..\..\..\packages\Xamarin.Android.Arch.Core.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Runtime.dll + + + ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.Core.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.Core.dll + + + ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.dll + + + ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll + + + ..\..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll + + + ..\..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll + + + ..\..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll + + + ..\..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll + + + ..\..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll + + + ..\..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll + + + ..\..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll + + + ..\..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll + + + ..\..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll + + + ..\..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll + + + ..\..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll + + + ..\..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll + + + ..\..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll + + + ..\..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll + + + ..\..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll + + + ..\..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {087DE224-30F0-4FEF-A960-F93F04182BA6} + FFImageLoading.MvvmCross.Sample.Core + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj index f1aa01f1e..8e89c0c19 100644 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj +++ b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj @@ -1,4 +1,4 @@ - + Debug @@ -117,9 +117,7 @@ false - - - + @@ -146,26 +144,10 @@ - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - {087DE224-30F0-4FEF-A960-F93F04182BA6} FFImageLoading.MvvmCross.Sample.Core - - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} - FFImageLoading.Svg.Touch - - - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - FFImageLoading.Touch - - - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} - FFImageLoading.Transformations.Touch - \ No newline at end of file diff --git a/samples/ImageLoading.Sample/Simple.Android.Sample.csproj b/samples/ImageLoading.Sample/Simple.Android.Sample.csproj index 9e52fb88f..be9865e69 100644 --- a/samples/ImageLoading.Sample/Simple.Android.Sample.csproj +++ b/samples/ImageLoading.Sample/Simple.Android.Sample.csproj @@ -1,247 +1,233 @@ - - - - Debug - AnyCPU - {F898A684-E9C1-4154-9F80-6037287233F5} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Properties - ImageLoading.Sample - ImageLoading.Sample - 512 - true - Resources\Resource.Designer.cs - Off - True - Properties\AndroidManifest.xml - v9.0 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - None - - - full - true - bin\Release\ - TRACE - prompt - 4 - False - - - - - - - - - - ..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Common.dll - - - ..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Common.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Runtime.dll - - - ..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll - - - ..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll - - - ..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll - - - ..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Fragment.dll - - - ..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Media.Compat.dll - - - ..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v4.dll - - - ..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.CardView.dll - - - ..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll - - - ..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Vector.Drawable.dll - - - ..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Animated.Vector.Drawable.dll - - - ..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.AppCompat.dll - - - - ..\..\packages\Xamarin.Android.Arch.Core.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Runtime.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.Core.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.Core.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll - - - ..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll - - - ..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll - - - ..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll - - - ..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll - - - ..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll - - - ..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll - - - ..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll - - - ..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll - - - ..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll - - - ..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll - - - ..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll - - - ..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll - - - ..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll - - - ..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll - - - ..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll - - - - - - - - - - - - - - - - - - - - - - AndroidResource - - - - - - - - - - - - - - - - - - - - - - - - - - {BD3CEB96-93D6-47BD-9474-01DFCD320897} - FFImageLoading.Transformations.Droid - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {74BF9402-3E13-4003-8923-BC20A1294CE2} - FFImageLoading.Droid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + Debug + AnyCPU + {F898A684-E9C1-4154-9F80-6037287233F5} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + ImageLoading.Sample + ImageLoading.Sample + 512 + true + Resources\Resource.Designer.cs + Off + True + Properties\AndroidManifest.xml + v9.0 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + None + + + full + true + bin\Release\ + TRACE + prompt + 4 + False + + + + + + + + + + ..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Common.dll + + + ..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Common.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Runtime.dll + + + ..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll + + + ..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll + + + ..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll + + + ..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Fragment.dll + + + ..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Media.Compat.dll + + + ..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v4.dll + + + ..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.CardView.dll + + + ..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll + + + ..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Vector.Drawable.dll + + + ..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Animated.Vector.Drawable.dll + + + ..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.AppCompat.dll + + + + ..\..\packages\Xamarin.Android.Arch.Core.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Runtime.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.Core.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.Core.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll + + + ..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll + + + ..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll + + + ..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll + + + ..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll + + + ..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll + + + ..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll + + + ..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll + + + ..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll + + + ..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll + + + ..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll + + + ..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll + + + ..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll + + + ..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll + + + ..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll + + + ..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll + + + + + + + + + + + + + + + + + + + + + + AndroidResource + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/Simple.TizenForms.Sample/Simple.TizenForms.Sample.csproj b/samples/Simple.TizenForms.Sample/Simple.TizenForms.Sample.csproj index 4a523686a..75f31f780 100644 --- a/samples/Simple.TizenForms.Sample/Simple.TizenForms.Sample.csproj +++ b/samples/Simple.TizenForms.Sample/Simple.TizenForms.Sample.csproj @@ -12,13 +12,4 @@ - - - - - - - - - diff --git a/samples/Simple.WinUniversal.Sample/Simple.Universal.Sample.csproj b/samples/Simple.WinUniversal.Sample/Simple.Universal.Sample.csproj index 270134d09..ce65c4d73 100644 --- a/samples/Simple.WinUniversal.Sample/Simple.Universal.Sample.csproj +++ b/samples/Simple.WinUniversal.Sample/Simple.Universal.Sample.csproj @@ -1,159 +1,145 @@ - - - - - Debug - x86 - x86 - {4B964916-47F4-4876-8A6B-9048B8A0D148} - AppContainerExe - Properties - Simple.Universal.Sample - Simple.Universal.Sample - en-US - UAP - 10.0.17134.0 - 10.0.17134.0 - 14 - 512 - {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Simple.Universal.Sample_TemporaryKey.pfx - win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot - - - true - bin\x86\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - ;2008 - full - x86 - false - prompt - true - - - bin\x86\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - true - ;2008 - pdbonly - x86 - false - prompt - true - true - - - true - bin\ARM\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - ;2008 - full - ARM - false - prompt - true - - - bin\ARM\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - true - ;2008 - pdbonly - ARM - false - prompt - true - true - - - true - bin\x64\Debug\ - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP - ;2008 - full - x64 - false - prompt - true - - - bin\x64\Release\ - TRACE;NETFX_CORE;WINDOWS_UWP - true - ;2008 - pdbonly - x64 - false - prompt - true - true - - - - App.xaml - - - MainPage.xaml - - - - - - Designer - - - - - - - - - - - - - - - - - - MSBuild:Compile - Designer - - - MSBuild:Compile - Designer - - - - - {51ca3be2-df00-4f49-8054-e5c776992b61} - FFImageLoading - - - {1602a3cb-80c2-42bb-b21a-6beb87ed6ee2} - FFImageLoading.Transformations.Windows - - - {610543a5-d06f-4bca-9443-e6addff06c71} - FFImageLoading.Windows - - - - - 6.1.5 - - - - 14.0 - - - + + + + + Debug + x86 + x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148} + AppContainerExe + Properties + Simple.Universal.Sample + Simple.Universal.Sample + en-US + UAP + 10.0.17134.0 + 10.0.17134.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Simple.Universal.Sample_TemporaryKey.pfx + win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot + + + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x86 + false + prompt + true + true + + + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM + false + prompt + true + + + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM + false + prompt + true + true + + + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x64 + false + prompt + true + true + + + + App.xaml + + + MainPage.xaml + + + + + + Designer + + + + + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + + + 6.1.5 + + + + 14.0 + + + \ No newline at end of file diff --git a/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj b/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj index c78d9ca59..dd10403fd 100644 --- a/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj +++ b/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj @@ -132,20 +132,6 @@ - - - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} - FFImageLoading.Transformations.Touch - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - FFImageLoading.Touch - - diff --git a/source/FFImageLoading.Forms.Droid/FFImageLoading.Forms.Droid.csproj b/source/FFImageLoading.Forms.Droid/FFImageLoading.Forms.Droid.csproj index c32a72ef9..77785c726 100644 --- a/source/FFImageLoading.Forms.Droid/FFImageLoading.Forms.Droid.csproj +++ b/source/FFImageLoading.Forms.Droid/FFImageLoading.Forms.Droid.csproj @@ -1,183 +1,174 @@ - - - - - Debug - AnyCPU - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {7014FEB6-0338-4A47-B600-4A1B48127C5C} - Library - FFImageLoading.Forms.Platform - Assets - Resources - Resource - FFImageLoading.Forms.Platform - v8.1 - - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Debug - DEBUG;ANDROID;__ANDROID__ - prompt - 4 - None - false - latest - - - true - portable - true - bin\Release - prompt - 4 - false - false - bin\Release\FFImageLoading.Forms.Platform.xml - ANDROID;__ANDROID__ - latest - - - - - - - - - - - - - - ..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid81\Xamarin.Android.Arch.Core.Common.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid81\Xamarin.Android.Arch.Lifecycle.Common.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid81\Xamarin.Android.Arch.Lifecycle.Runtime.dll - - - ..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Annotations.dll - - - ..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Compat.dll - - - ..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Core.UI.dll - - - ..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Core.Utils.dll - - - ..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Fragment.dll - - - ..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Media.Compat.dll - - - ..\..\packages\Xamarin.Android.Support.Transition.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Transition.dll - - - ..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v4.dll - - - ..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.CardView.dll - - - ..\..\packages\Xamarin.Android.Support.v7.Palette.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.Palette.dll - - - ..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.RecyclerView.dll - - - ..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Vector.Drawable.dll - - - ..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Animated.Vector.Drawable.dll - - - ..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.AppCompat.dll - - - ..\..\packages\Xamarin.Android.Support.Design.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Design.dll - - - ..\..\packages\Xamarin.Android.Support.v7.MediaRouter.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.MediaRouter.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\FormsViewGroup.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\Xamarin.Forms.Core.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\Xamarin.Forms.Platform.Android.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\Xamarin.Forms.Platform.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\Xamarin.Forms.Xaml.dll - - - ..\..\packages\Xamarin.Android.Support.CustomTabs.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.CustomTabs.dll - - - - - - - - - - - - - - - - - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {74BF9402-3E13-4003-8923-BC20A1294CE2} - FFImageLoading.Droid - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Debug + AnyCPU + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {7014FEB6-0338-4A47-B600-4A1B48127C5C} + Library + FFImageLoading.Forms.Platform + Assets + Resources + Resource + FFImageLoading.Forms.Platform + v8.1 + + + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Debug + DEBUG;ANDROID;__ANDROID__ + prompt + 4 + None + false + latest + + + true + portable + true + bin\Release + prompt + 4 + false + false + bin\Release\FFImageLoading.Forms.Platform.xml + ANDROID;__ANDROID__ + latest + + + + + + + + + + + + + + ..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid81\Xamarin.Android.Arch.Core.Common.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid81\Xamarin.Android.Arch.Lifecycle.Common.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid81\Xamarin.Android.Arch.Lifecycle.Runtime.dll + + + ..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Annotations.dll + + + ..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Compat.dll + + + ..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Core.UI.dll + + + ..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Core.Utils.dll + + + ..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Fragment.dll + + + ..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Media.Compat.dll + + + ..\..\packages\Xamarin.Android.Support.Transition.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Transition.dll + + + ..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v4.dll + + + ..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.CardView.dll + + + ..\..\packages\Xamarin.Android.Support.v7.Palette.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.Palette.dll + + + ..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.RecyclerView.dll + + + ..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Vector.Drawable.dll + + + ..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Animated.Vector.Drawable.dll + + + ..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.AppCompat.dll + + + ..\..\packages\Xamarin.Android.Support.Design.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.Design.dll + + + ..\..\packages\Xamarin.Android.Support.v7.MediaRouter.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.v7.MediaRouter.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\FormsViewGroup.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\Xamarin.Forms.Core.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\Xamarin.Forms.Platform.Android.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\Xamarin.Forms.Platform.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid81\Xamarin.Forms.Xaml.dll + + + ..\..\packages\Xamarin.Android.Support.CustomTabs.28.0.0.1\lib\monoandroid81\Xamarin.Android.Support.CustomTabs.dll + + + + + + + + + + + + + + + + + + + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} + FFImageLoading.Forms + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Mac/FFImageLoading.Forms.Mac.csproj b/source/FFImageLoading.Forms.Mac/FFImageLoading.Forms.Mac.csproj index 280611d8c..23b0991d4 100644 --- a/source/FFImageLoading.Forms.Mac/FFImageLoading.Forms.Mac.csproj +++ b/source/FFImageLoading.Forms.Mac/FFImageLoading.Forms.Mac.csproj @@ -1,105 +1,99 @@ - - - - - Debug - AnyCPU - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2} - {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.Forms.Platform - FFImageLoading.Forms.Platform - v2.0 - Xamarin.Mac - Resources - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Debug - DEBUG;__MACOS__; - prompt - 4 - false - false - false - false - false - HttpClientHandler - None - - None - latest - - - true - portable - true - bin\Release - __MACOS__; - prompt - 4 - bin\Release\FFImageLoading.Forms.Platform.xml - false - false - false - false - false - HttpClientHandler - None - - None - latest - - - - - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Core.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.macOS.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Xaml.dll - - - - - - CachedImageRenderer.cs - - - ImageSourceBinding.cs - - - FFImageLoadingImageSourceHandler.cs - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6} - FFImageLoading.Mac - - - - - - - - + + + + + Debug + AnyCPU + {EC240D61-70B0-4561-BB43-F8FB8FD11BF2} + {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.Forms.Platform + FFImageLoading.Forms.Platform + v2.0 + Xamarin.Mac + Resources + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Debug + DEBUG;__MACOS__; + prompt + 4 + false + false + false + false + false + HttpClientHandler + None + + + None + latest + + + true + portable + true + bin\Release + __MACOS__; + prompt + 4 + bin\Release\FFImageLoading.Forms.Platform.xml + false + false + false + false + false + HttpClientHandler + None + + + None + latest + + + + + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Core.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.macOS.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Xaml.dll + + + + + + CachedImageRenderer.cs + + + ImageSourceBinding.cs + + + FFImageLoadingImageSourceHandler.cs + + + + + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} + FFImageLoading.Forms + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Tizen/FFImageLoading.Forms.Tizen.csproj b/source/FFImageLoading.Forms.Tizen/FFImageLoading.Forms.Tizen.csproj index fd319e9fc..1f9e621b5 100644 --- a/source/FFImageLoading.Forms.Tizen/FFImageLoading.Forms.Tizen.csproj +++ b/source/FFImageLoading.Forms.Tizen/FFImageLoading.Forms.Tizen.csproj @@ -38,6 +38,5 @@ - \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Touch/FFImageLoading.Forms.Touch.csproj b/source/FFImageLoading.Forms.Touch/FFImageLoading.Forms.Touch.csproj index c461d154e..f994be346 100644 --- a/source/FFImageLoading.Forms.Touch/FFImageLoading.Forms.Touch.csproj +++ b/source/FFImageLoading.Forms.Touch/FFImageLoading.Forms.Touch.csproj @@ -1,85 +1,77 @@ - - - - - Debug - AnyCPU - {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC} - Library - FFImageLoading.Forms.Platform - Resources - FFImageLoading.Forms.Platform - 1591 - - - true - portable - false - bin\Debug - DEBUG;__UNIFIED__;__MOBILE__;__IOS__; - prompt - 4 - false - latest - - - true - portable - true - bin\Release - __UNIFIED__;__MOBILE__;__IOS__; - prompt - 4 - false - bin\Release\FFImageLoading.Forms.Platform.xml - latest - - - - - - - - ..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll - - - - - - - - - - - - - - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - FFImageLoading.Touch - - - + + + + + Debug + AnyCPU + {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC} + Library + FFImageLoading.Forms.Platform + Resources + FFImageLoading.Forms.Platform + 1591 + + + true + portable + false + bin\Debug + DEBUG;__UNIFIED__;__MOBILE__;__IOS__; + prompt + 4 + false + latest + + + true + portable + true + bin\Release + __UNIFIED__;__MOBILE__;__IOS__; + prompt + 4 + false + bin\Release\FFImageLoading.Forms.Platform.xml + latest + + + + + + + + ..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll + + + + + + + + + + + + + + + + {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} + FFImageLoading.Forms + + + \ No newline at end of file diff --git a/source/FFImageLoading.Forms.WinUWP/FFImageLoading.Forms.WinUWP.csproj b/source/FFImageLoading.Forms.WinUWP/FFImageLoading.Forms.WinUWP.csproj index 4cb1d5e66..0ea23d49e 100644 --- a/source/FFImageLoading.Forms.WinUWP/FFImageLoading.Forms.WinUWP.csproj +++ b/source/FFImageLoading.Forms.WinUWP/FFImageLoading.Forms.WinUWP.csproj @@ -1,155 +1,147 @@ - - - - - Debug - AnyCPU - {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659} - Library - PackageReference - Properties - FFImageLoading.Forms.Platform - FFImageLoading.Forms.Platform - FFImageLoading.Forms.Platform.UWP - en-US - UAP - 10.0.17134.0 - 10.0.16299.0 - 14 - 512 - {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot - 1701;1702;1705;1591;1587;NU1605 - - - AnyCPU - true - portable - false - bin\Debug - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - prompt - 4 - Latest - - - AnyCPU - true - portable - true - bin\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - prompt - 4 - bin\Release\FFImageLoading.Forms.Platform.xml - Latest - - - AnyCPU - true - portable - bin\ARM\Debug - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - AnyCPU - false - prompt - Latest - - - ARM - bin\ARM\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - true - portable - ARM - false - prompt - bin\ARM\Release\FFImageLoading.Forms.Platform.xml - Latest - - - AnyCPU - bin\x64\Debug - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - portable - AnyCPU - false - prompt - Latest - - - x64 - bin\x64\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - true - portable - x64 - bin\x64\Release\FFImageLoading.Forms.Platform.xml - false - prompt - Latest - - - AnyCPU - bin\x86\Debug - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - portable - AnyCPU - false - prompt - true - Latest - - - x86 - bin\x86\Release - bin\x86\Release\FFImageLoading.Forms.Platform.xml - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - true - portable - x86 - false - prompt - true - Latest - - - - - - - - - {51ca3be2-df00-4f49-8054-e5c776992b61} - FFImageLoading - - - {3d6c1f12-68d7-44c2-a7de-8e7942627a01} - FFImageLoading.Forms - - - {610543a5-d06f-4bca-9443-e6addff06c71} - FFImageLoading.Windows - - - - - - - - 14.0 - - - + + + + + Debug + AnyCPU + {B8BE9FE7-2D07-40B5-8DAE-BA52F944C659} + Library + PackageReference + Properties + FFImageLoading.Forms.Platform + FFImageLoading.Forms.Platform + FFImageLoading.Forms.Platform.UWP + en-US + UAP + 10.0.17134.0 + 10.0.16299.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot + 1701;1702;1705;1591;1587;NU1605 + + + AnyCPU + true + portable + false + bin\Debug + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + prompt + 4 + Latest + + + AnyCPU + true + portable + true + bin\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + prompt + 4 + bin\Release\FFImageLoading.Forms.Platform.xml + Latest + + + AnyCPU + true + portable + bin\ARM\Debug + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + AnyCPU + false + prompt + Latest + + + ARM + bin\ARM\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + true + portable + ARM + false + prompt + bin\ARM\Release\FFImageLoading.Forms.Platform.xml + Latest + + + AnyCPU + bin\x64\Debug + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + portable + AnyCPU + false + prompt + Latest + + + x64 + bin\x64\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + true + portable + x64 + bin\x64\Release\FFImageLoading.Forms.Platform.xml + false + prompt + Latest + + + AnyCPU + bin\x86\Debug + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + portable + AnyCPU + false + prompt + true + Latest + + + x86 + bin\x86\Release + bin\x86\Release\FFImageLoading.Forms.Platform.xml + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + true + portable + x86 + false + prompt + true + Latest + + + + + + + + + {3d6c1f12-68d7-44c2-a7de-8e7942627a01} + FFImageLoading.Forms + + + + + + + + 14.0 + + + \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj b/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj index 99c24776c..4e93e1ada 100644 --- a/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj +++ b/source/FFImageLoading.Forms.Wpf/FFImageLoading.Forms.Wpf.csproj @@ -50,18 +50,10 @@ - - {0ad3a755-399a-4527-a001-6192724c67bb} - FFImageLoading - {0e77b5d3-dba5-46d3-af16-7c209c952bd0} FFImageLoading.Forms - - {dc06c582-6c7e-4018-a752-feb528c65f7e} - FFImageLoading.Wpf - diff --git a/source/FFImageLoading.Forms/FFImageLoading.Forms.csproj b/source/FFImageLoading.Forms/FFImageLoading.Forms.csproj index 371ccc11a..f91b19d4e 100644 --- a/source/FFImageLoading.Forms/FFImageLoading.Forms.csproj +++ b/source/FFImageLoading.Forms/FFImageLoading.Forms.csproj @@ -38,9 +38,7 @@ - - diff --git a/source/FFImageLoading.Mac/FFImageLoading.Mac.csproj b/source/FFImageLoading.Mac/FFImageLoading.Mac.csproj index ca1a19ddf..97dd9ec11 100644 --- a/source/FFImageLoading.Mac/FFImageLoading.Mac.csproj +++ b/source/FFImageLoading.Mac/FFImageLoading.Mac.csproj @@ -1,97 +1,90 @@ - - - - Debug - AnyCPU - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6} - {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading - FFImageLoading.Platform - v2.0 - Xamarin.Mac - Resources - 1591 - - - true - portable - false - bin\Debug - DEBUG;__MACOS__ - prompt - 4 - false - false - false - false - false - HttpClientHandler - None - - None - Latest - - - true - portable - true - bin\Release - __MACOS__ - prompt - 4 - bin\Release\FFImageLoading.Platform.xml - false - false - false - false - false - HttpClientHandler - None - - None - __MACOS__ - Latest - - - - - - - - - ..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.Mac20\WebP.Mac.dll - - - - - - - Extensions\TaskParameterExtensions.cs - - - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - - - - - - - - - - - - - + + + + Debug + AnyCPU + {91825F9F-8F2D-4848-8375-68FCAA8C0DC6} + {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading + FFImageLoading.Platform + v2.0 + Xamarin.Mac + Resources + 1591 + + + true + portable + false + bin\Debug + DEBUG;__MACOS__ + prompt + 4 + false + false + false + false + false + HttpClientHandler + None + + + None + Latest + + + true + portable + true + bin\Release + __MACOS__ + prompt + 4 + bin\Release\FFImageLoading.Platform.xml + false + false + false + false + false + HttpClientHandler + None + + + None + __MACOS__ + Latest + + + + + + + + + ..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.Mac20\WebP.Mac.dll + + + + + + + Extensions\TaskParameterExtensions.cs + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Mock/FFImageLoading.Mock.csproj b/source/FFImageLoading.Mock/FFImageLoading.Mock.csproj index d10558063..3588e248c 100644 --- a/source/FFImageLoading.Mock/FFImageLoading.Mock.csproj +++ b/source/FFImageLoading.Mock/FFImageLoading.Mock.csproj @@ -33,8 +33,4 @@ - - - - diff --git a/source/FFImageLoading.Svg.Droid/FFImageLoading.Svg.Droid.csproj b/source/FFImageLoading.Svg.Droid/FFImageLoading.Svg.Droid.csproj index ae8b2efbd..a7456ad58 100644 --- a/source/FFImageLoading.Svg.Droid/FFImageLoading.Svg.Droid.csproj +++ b/source/FFImageLoading.Svg.Droid/FFImageLoading.Svg.Droid.csproj @@ -1,74 +1,64 @@ - - - - Debug - AnyCPU - {0BF13419-BA9C-4004-812C-EB22E41927D9} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.Svg.Platform - FFImageLoading.Svg.Platform - v9.0 - Resources\Resource.designer.cs - Resource - Resources - Assets - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Release - DEBUG;ANDROID;__ANDROID__ - prompt - 4 - None - DEBUG;ANDROID;__ANDROID__ - latest - - - true - portable - true - bin\Release - prompt - 4 - bin\Release\FFImageLoading.Svg.Platform.xml - true - false - ANDROID;__ANDROID__ - latest - - - - - - - - - ..\..\packages\SkiaSharp.1.68.0\lib\MonoAndroid\SkiaSharp.dll - - - - - - MvxSvgCachedImageView.cs - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {74BF9402-3E13-4003-8923-BC20A1294CE2} - FFImageLoading.Droid - - - - - - - + + + + Debug + AnyCPU + {0BF13419-BA9C-4004-812C-EB22E41927D9} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.Svg.Platform + FFImageLoading.Svg.Platform + v9.0 + Resources\Resource.designer.cs + Resource + Resources + Assets + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Release + DEBUG;ANDROID;__ANDROID__ + prompt + 4 + None + DEBUG;ANDROID;__ANDROID__ + latest + + + true + portable + true + bin\Release + prompt + 4 + bin\Release\FFImageLoading.Svg.Platform.xml + true + false + ANDROID;__ANDROID__ + latest + + + + + + + + + ..\..\packages\SkiaSharp.1.68.0\lib\MonoAndroid\SkiaSharp.dll + + + + + + MvxSvgCachedImageView.cs + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Forms.Droid/FFImageLoading.Svg.Forms.Droid.csproj b/source/FFImageLoading.Svg.Forms.Droid/FFImageLoading.Svg.Forms.Droid.csproj index d64fd3b37..fd2c998ed 100644 --- a/source/FFImageLoading.Svg.Forms.Droid/FFImageLoading.Svg.Forms.Droid.csproj +++ b/source/FFImageLoading.Svg.Forms.Droid/FFImageLoading.Svg.Forms.Droid.csproj @@ -1,255 +1,239 @@ - - - - - Debug - AnyCPU - {CCA629E9-55E3-414A-91AF-79A0CB845CD5} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.Svg.Forms - FFImageLoading.Svg.Forms - v9.0 - Resources\Resource.designer.cs - Resource - Resources - Assets - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Release - DEBUG; - prompt - 4 - None - latest - - - true - portable - true - bin\Release - prompt - 4 - bin\Release\FFImageLoading.Svg.Forms.xml - true - false - latest - - - - - - - - - ..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Common.dll - - - ..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Common.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Runtime.dll - - - ..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll - - - ..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll - - - ..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll - - - ..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Fragment.dll - - - ..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Media.Compat.dll - - - ..\..\packages\Xamarin.Android.Support.Transition.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Transition.dll - - - ..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v4.dll - - - ..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.CardView.dll - - - ..\..\packages\Xamarin.Android.Support.v7.Palette.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.Palette.dll - - - ..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll - - - ..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Vector.Drawable.dll - - - ..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Animated.Vector.Drawable.dll - - - ..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.AppCompat.dll - - - ..\..\packages\Xamarin.Android.Support.Design.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Design.dll - - - ..\..\packages\Xamarin.Android.Support.v7.MediaRouter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.MediaRouter.dll - - - ..\..\packages\SkiaSharp.1.68.0\lib\MonoAndroid\SkiaSharp.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\FormsViewGroup.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Core.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Platform.Android.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Platform.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Xaml.dll - - - - ..\..\packages\Xamarin.Android.Arch.Core.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Runtime.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.Core.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.Core.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll - - - ..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll - - - ..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll - - - ..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll - - - ..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll - - - ..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll - - - ..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll - - - ..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll - - - ..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll - - - ..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll - - - ..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll - - - ..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll - - - ..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll - - - ..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll - - - ..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll - - - ..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll - - - ..\..\packages\Xamarin.Android.Support.CustomTabs.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomTabs.dll - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {74BF9402-3E13-4003-8923-BC20A1294CE2} - FFImageLoading.Droid - - - {7014FEB6-0338-4A47-B600-4A1B48127C5C} - FFImageLoading.Forms.Droid - - - {0BF13419-BA9C-4004-812C-EB22E41927D9} - FFImageLoading.Svg.Droid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + Debug + AnyCPU + {CCA629E9-55E3-414A-91AF-79A0CB845CD5} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.Svg.Forms + FFImageLoading.Svg.Forms + v9.0 + Resources\Resource.designer.cs + Resource + Resources + Assets + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Release + DEBUG; + prompt + 4 + None + latest + + + true + portable + true + bin\Release + prompt + 4 + bin\Release\FFImageLoading.Svg.Forms.xml + true + false + latest + + + + + + + + + ..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Common.dll + + + ..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Common.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Runtime.dll + + + ..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll + + + ..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll + + + ..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll + + + ..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Fragment.dll + + + ..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Media.Compat.dll + + + ..\..\packages\Xamarin.Android.Support.Transition.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Transition.dll + + + ..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v4.dll + + + ..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.CardView.dll + + + ..\..\packages\Xamarin.Android.Support.v7.Palette.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.Palette.dll + + + ..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll + + + ..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Vector.Drawable.dll + + + ..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Animated.Vector.Drawable.dll + + + ..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.AppCompat.dll + + + ..\..\packages\Xamarin.Android.Support.Design.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Design.dll + + + ..\..\packages\Xamarin.Android.Support.v7.MediaRouter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.MediaRouter.dll + + + ..\..\packages\SkiaSharp.1.68.0\lib\MonoAndroid\SkiaSharp.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\FormsViewGroup.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Core.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Platform.Android.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Platform.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Xaml.dll + + + + ..\..\packages\Xamarin.Android.Arch.Core.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Runtime.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.Core.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.Core.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.dll + + + ..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll + + + ..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll + + + ..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll + + + ..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll + + + ..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll + + + ..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll + + + ..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll + + + ..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll + + + ..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll + + + ..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll + + + ..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll + + + ..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll + + + ..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll + + + ..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll + + + ..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll + + + ..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll + + + ..\..\packages\Xamarin.Android.Support.CustomTabs.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomTabs.dll + + + + + + + + {0BF13419-BA9C-4004-812C-EB22E41927D9} + FFImageLoading.Svg.Droid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Forms.Mac/FFImageLoading.Svg.Forms.Mac.csproj b/source/FFImageLoading.Svg.Forms.Mac/FFImageLoading.Svg.Forms.Mac.csproj index b0645aee9..57bb92193 100644 --- a/source/FFImageLoading.Svg.Forms.Mac/FFImageLoading.Svg.Forms.Mac.csproj +++ b/source/FFImageLoading.Svg.Forms.Mac/FFImageLoading.Svg.Forms.Mac.csproj @@ -1,109 +1,95 @@ - - - - - - Debug - AnyCPU - {411B82F4-4F6B-49A0-8E28-260FB65B386F} - {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.Svg.Forms - FFImageLoading.Svg.Forms - v2.0 - Xamarin.Mac - Resources - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Debug - DEBUG;__MACOS__ - prompt - 4 - false - false - false - false - false - HttpClientHandler - None - - None - latest - - - true - portable - true - bin\Release - __MACOS__ - prompt - 4 - bin\Release\FFImageLoading.Svg.Forms.xml - false - false - false - false - false - HttpClientHandler - None - - None - __MACOS__ - latest - - - - - - - ..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.Mac20\SkiaSharp.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Core.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.macOS.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Xaml.dll - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {EC240D61-70B0-4561-BB43-F8FB8FD11BF2} - FFImageLoading.Forms.Mac - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6} - FFImageLoading.Mac - - - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3} - FFImageLoading.Svg.Mac - - - - - - - - + + + + + + Debug + AnyCPU + {411B82F4-4F6B-49A0-8E28-260FB65B386F} + {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.Svg.Forms + FFImageLoading.Svg.Forms + v2.0 + Xamarin.Mac + Resources + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Debug + DEBUG;__MACOS__ + prompt + 4 + false + false + false + false + false + HttpClientHandler + None + + + None + latest + + + true + portable + true + bin\Release + __MACOS__ + prompt + 4 + bin\Release\FFImageLoading.Svg.Forms.xml + false + false + false + false + false + HttpClientHandler + None + + + None + __MACOS__ + latest + + + + + + + ..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.Mac20\SkiaSharp.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Core.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.macOS.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Xaml.dll + + + + + + + + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3} + FFImageLoading.Svg.Mac + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Forms.Tizen/FFImageLoading.Svg.Forms.Tizen.csproj b/source/FFImageLoading.Svg.Forms.Tizen/FFImageLoading.Svg.Forms.Tizen.csproj index f3de5cf01..e38635679 100644 --- a/source/FFImageLoading.Svg.Forms.Tizen/FFImageLoading.Svg.Forms.Tizen.csproj +++ b/source/FFImageLoading.Svg.Forms.Tizen/FFImageLoading.Svg.Forms.Tizen.csproj @@ -32,9 +32,6 @@ - - - diff --git a/source/FFImageLoading.Svg.Forms.Touch/FFImageLoading.Svg.Forms.Touch.csproj b/source/FFImageLoading.Svg.Forms.Touch/FFImageLoading.Svg.Forms.Touch.csproj index 61a639e19..02fa4c64a 100644 --- a/source/FFImageLoading.Svg.Forms.Touch/FFImageLoading.Svg.Forms.Touch.csproj +++ b/source/FFImageLoading.Svg.Forms.Touch/FFImageLoading.Svg.Forms.Touch.csproj @@ -1,97 +1,83 @@ - - - - Debug - AnyCPU - {A73A1EA8-E709-474D-9102-DCB2482950AB} - {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.Svg.Forms - FFImageLoading.Svg.Forms - Resources - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Debug - prompt - 4 - SdkOnly - HttpClientHandler - Default - DEBUG;__UNIFIED__;__MOBILE__;__IOS__ - latest - - - true - portable - true - bin\Release - __UNIFIED__;__MOBILE__;__IOS__ - prompt - 4 - bin\Release\FFImageLoading.Svg.Forms.xml - SdkOnly - HttpClientHandler - Default - __UNIFIED__;__MOBILE__;__IOS__ - latest - - - - - - - - - - ..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.iOS\SkiaSharp.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll - - - ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} - FFImageLoading.Svg.Touch - - - {1E70A5AF-AAFA-4247-8AFE-39CDA73EBCEC} - FFImageLoading.Forms.Touch - - - {3D6C1F12-68D7-44C2-A7DE-8E7942627A01} - FFImageLoading.Forms - - - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - FFImageLoading.Touch - - - - - - - - - + + + + Debug + AnyCPU + {A73A1EA8-E709-474D-9102-DCB2482950AB} + {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.Svg.Forms + FFImageLoading.Svg.Forms + Resources + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Debug + prompt + 4 + SdkOnly + HttpClientHandler + Default + DEBUG;__UNIFIED__;__MOBILE__;__IOS__ + latest + + + true + portable + true + bin\Release + __UNIFIED__;__MOBILE__;__IOS__ + prompt + 4 + bin\Release\FFImageLoading.Svg.Forms.xml + SdkOnly + HttpClientHandler + Default + __UNIFIED__;__MOBILE__;__IOS__ + latest + + + + + + + + + + ..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.iOS\SkiaSharp.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll + + + ..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll + + + + + + + + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} + FFImageLoading.Svg.Touch + false + false + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Forms.Windows/FFImageLoading.Svg.Forms.Windows.csproj b/source/FFImageLoading.Svg.Forms.Windows/FFImageLoading.Svg.Forms.Windows.csproj index b51b4dd7f..bb956b44b 100644 --- a/source/FFImageLoading.Svg.Forms.Windows/FFImageLoading.Svg.Forms.Windows.csproj +++ b/source/FFImageLoading.Svg.Forms.Windows/FFImageLoading.Svg.Forms.Windows.csproj @@ -1,159 +1,147 @@ - - - - - Debug - AnyCPU - {6D4F9DFA-012E-4966-A6E8-01C3464B537E} - Library - Properties - FFImageLoading.Svg.Forms - FFImageLoading.Svg.Forms - FFImageLoading.Svg.Forms.Windows - en-US - PackageReference - UAP - 10.0.17134.0 - 10.0.16299.0 - 14 - latest - 512 - {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot - - - AnyCPU - true - portable - false - bin\Debug - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - prompt - 4 - - - AnyCPU - true - portable - true - bin\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - prompt - 4 - bin\Release\FFImageLoading.Svg.Forms.xml - - - x86 - true - portable - bin\x86\Debug - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - ;2008 - x86 - false - prompt - - - x86 - bin\x86\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - ;2008 - true - portable - x86 - false - prompt - - - ARM - true - portable - bin\ARM\Debug - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - ;2008 - ARM - false - prompt - - - ARM - bin\ARM\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - ;2008 - true - portable - ARM - false - prompt - - - AnyCPU - true - portable - bin\x64\Debug - DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - ;2008 - AnyCPU - false - prompt - - - AnyCPU - bin\x64\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - ;2008 - true - portable - AnyCPU - false - prompt - - - - - - - - {51ca3be2-df00-4f49-8054-e5c776992b61} - FFImageLoading - - - {3d6c1f12-68d7-44c2-a7de-8e7942627a01} - FFImageLoading.Forms - - - {5140739d-209c-41a7-9503-5d5733f4c091} - FFImageLoading.Svg.Windows - - - {610543a5-d06f-4bca-9443-e6addff06c71} - FFImageLoading.Windows - - - - - 6.1.5 - - - 1.68.0 - - - 3.6.0.344457 - - - - - 14.0 - - - + + + + + Debug + AnyCPU + {6D4F9DFA-012E-4966-A6E8-01C3464B537E} + Library + Properties + FFImageLoading.Svg.Forms + FFImageLoading.Svg.Forms + FFImageLoading.Svg.Forms.Windows + en-US + PackageReference + UAP + 10.0.17134.0 + 10.0.16299.0 + 14 + latest + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot + + + AnyCPU + true + portable + false + bin\Debug + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + prompt + 4 + + + AnyCPU + true + portable + true + bin\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + prompt + 4 + bin\Release\FFImageLoading.Svg.Forms.xml + + + x86 + true + portable + bin\x86\Debug + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + ;2008 + x86 + false + prompt + + + x86 + bin\x86\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + ;2008 + true + portable + x86 + false + prompt + + + ARM + true + portable + bin\ARM\Debug + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + ;2008 + ARM + false + prompt + + + ARM + bin\ARM\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + ;2008 + true + portable + ARM + false + prompt + + + AnyCPU + true + portable + bin\x64\Debug + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + ;2008 + AnyCPU + false + prompt + + + AnyCPU + bin\x64\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + ;2008 + true + portable + AnyCPU + false + prompt + + + + + + + + {5140739d-209c-41a7-9503-5d5733f4c091} + FFImageLoading.Svg.Windows + + + + + 6.1.5 + + + 1.68.0 + + + 3.6.0.344457 + + + + + 14.0 + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj b/source/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj index d077040b7..0f5be02be 100644 --- a/source/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj +++ b/source/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj @@ -38,11 +38,7 @@ - - - - diff --git a/source/FFImageLoading.Svg.Mac/FFImageLoading.Svg.Mac.csproj b/source/FFImageLoading.Svg.Mac/FFImageLoading.Svg.Mac.csproj index 5d9311a09..32c315ad5 100644 --- a/source/FFImageLoading.Svg.Mac/FFImageLoading.Svg.Mac.csproj +++ b/source/FFImageLoading.Svg.Mac/FFImageLoading.Svg.Mac.csproj @@ -1,85 +1,77 @@ - - - - Debug - AnyCPU - {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3} - {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.Svg - FFImageLoading.Svg.Platform - v2.0 - Xamarin.Mac - Resources - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Debug - DEBUG;__MACOS__ - prompt - 4 - false - false - false - false - false - HttpClientHandler - None - - None - latest - - - true - portable - true - bin\Release - __MACOS__ - prompt - 4 - bin\Release\FFImageLoading.Svg.Platform.xml - false - false - false - false - false - HttpClientHandler - None - - None - __MACOS__ - latest - - - - - - - - - ..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.Mac20\SkiaSharp.dll - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6} - FFImageLoading.Mac - - - - - - - - + + + + Debug + AnyCPU + {EAEFDF02-E6BB-4ACD-925A-F8BCCD479DA3} + {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.Svg + FFImageLoading.Svg.Platform + v2.0 + Xamarin.Mac + Resources + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Debug + DEBUG;__MACOS__ + prompt + 4 + false + false + false + false + false + HttpClientHandler + None + + + None + latest + + + true + portable + true + bin\Release + __MACOS__ + prompt + 4 + bin\Release\FFImageLoading.Svg.Platform.xml + false + false + false + false + false + HttpClientHandler + None + + + None + __MACOS__ + latest + + + + + + + + + ..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.Mac20\SkiaSharp.dll + + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Tizen/FFImageLoading.Svg.Tizen.csproj b/source/FFImageLoading.Svg.Tizen/FFImageLoading.Svg.Tizen.csproj index 78aeca7fd..bfb88e5ed 100644 --- a/source/FFImageLoading.Svg.Tizen/FFImageLoading.Svg.Tizen.csproj +++ b/source/FFImageLoading.Svg.Tizen/FFImageLoading.Svg.Tizen.csproj @@ -31,11 +31,6 @@ - - - - - \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Touch/FFImageLoading.Svg.Touch.csproj b/source/FFImageLoading.Svg.Touch/FFImageLoading.Svg.Touch.csproj index c058bd7d1..75932c852 100644 --- a/source/FFImageLoading.Svg.Touch/FFImageLoading.Svg.Touch.csproj +++ b/source/FFImageLoading.Svg.Touch/FFImageLoading.Svg.Touch.csproj @@ -1,74 +1,70 @@ - - - - Debug - AnyCPU - {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} - {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.Svg.Platform - FFImageLoading.Svg.Platform - Resources - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Release - prompt - 4 - - - - DEBUG;__UNIFIED__;__MOBILE__;__IOS__; - latest - - - true - portable - true - bin\Release - __UNIFIED__;__MOBILE__;__IOS__; - prompt - 4 - bin\Release\FFImageLoading.Svg.Platform.xml - - - - __UNIFIED__;__MOBILE__;__IOS__; - latest - - - - - - - - - - ..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.iOS\SkiaSharp.dll - - - - - - MvxSvgCachedImageView.cs - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - FFImageLoading.Touch - - - - - - - + + + + Debug + AnyCPU + {AA5B8D71-77C6-4341-BFBA-EBB7B8FAF5AC} + {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.Svg.Platform + FFImageLoading.Svg.Platform + Resources + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Release + prompt + 4 + + + + + + + DEBUG;__UNIFIED__;__MOBILE__;__IOS__; + latest + + + true + portable + true + bin\Release + __UNIFIED__;__MOBILE__;__IOS__; + prompt + 4 + bin\Release\FFImageLoading.Svg.Platform.xml + + + + + + + __UNIFIED__;__MOBILE__;__IOS__; + latest + + + + + + + + + + ..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.iOS\SkiaSharp.dll + + + + + + MvxSvgCachedImageView.cs + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Windows/FFImageLoading.Svg.Windows.csproj b/source/FFImageLoading.Svg.Windows/FFImageLoading.Svg.Windows.csproj index 0f874654f..9468a0387 100644 --- a/source/FFImageLoading.Svg.Windows/FFImageLoading.Svg.Windows.csproj +++ b/source/FFImageLoading.Svg.Windows/FFImageLoading.Svg.Windows.csproj @@ -1,146 +1,136 @@ - - - - - Debug - AnyCPU - {5140739D-209C-41A7-9503-5D5733F4C091} - Library - Properties - FFImageLoading.Svg.Platform - FFImageLoading.Svg.Platform - FFImageLoading.Svg.Platform.Windows - en-US - UAP - 10.0.17134.0 - 10.0.16299.0 - 14 - PackageReference - latest - 512 - {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot - 1701;1702;1705;1591;1587;NU1605 - - - AnyCPU - true - portable - false - bin\Debug - TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; - prompt - 4 - - - AnyCPU - true - portable - true - bin\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; - prompt - 4 - bin\Release\FFImageLoading.Svg.Platform.xml - - - x86 - true - portable - bin\x86\Debug - TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; - x86 - false - prompt - - - x86 - bin\x86\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - true - portable - x86 - false - prompt - - - ARM - true - portable - bin\ARM\Debug - TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; - ARM - false - prompt - - - ARM - bin\ARM\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - true - portable - ARM - false - prompt - - - AnyCPU - true - portable - bin\x64\Debug - TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; - AnyCPU - false - prompt - - - AnyCPU - bin\x64\Release - TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ - true - true - portable - AnyCPU - false - prompt - - - - MvxSvgCachedImageView.cs - - - - - - - {51ca3be2-df00-4f49-8054-e5c776992b61} - FFImageLoading - - - {610543a5-d06f-4bca-9443-e6addff06c71} - FFImageLoading.Windows - - - - - 6.1.5 - - - 1.68.0 - - - - - 14.0 - - - + + + + + Debug + AnyCPU + {5140739D-209C-41A7-9503-5D5733F4C091} + Library + Properties + FFImageLoading.Svg.Platform + FFImageLoading.Svg.Platform + FFImageLoading.Svg.Platform.Windows + en-US + UAP + 10.0.17134.0 + 10.0.16299.0 + 14 + PackageReference + latest + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot + 1701;1702;1705;1591;1587;NU1605 + + + AnyCPU + true + portable + false + bin\Debug + TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; + prompt + 4 + + + AnyCPU + true + portable + true + bin\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; + prompt + 4 + bin\Release\FFImageLoading.Svg.Platform.xml + + + x86 + true + portable + bin\x86\Debug + TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; + x86 + false + prompt + + + x86 + bin\x86\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + true + portable + x86 + false + prompt + + + ARM + true + portable + bin\ARM\Debug + TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; + ARM + false + prompt + + + ARM + bin\ARM\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + true + portable + ARM + false + prompt + + + AnyCPU + true + portable + bin\x64\Debug + TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;__WINDOWS__; + AnyCPU + false + prompt + + + AnyCPU + bin\x64\Release + TRACE;NETFX_CORE;WINDOWS_UWP;__WINDOWS__ + true + true + portable + AnyCPU + false + prompt + + + + MvxSvgCachedImageView.cs + + + + + + + 6.1.5 + + + 1.68.0 + + + + + 14.0 + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg/FFImageLoading.Svg.csproj b/source/FFImageLoading.Svg/FFImageLoading.Svg.csproj index a3f35fddd..b0d6d9648 100644 --- a/source/FFImageLoading.Svg/FFImageLoading.Svg.csproj +++ b/source/FFImageLoading.Svg/FFImageLoading.Svg.csproj @@ -34,8 +34,4 @@ - - - - diff --git a/source/FFImageLoading.Tizen/FFImageLoading.Tizen.csproj b/source/FFImageLoading.Tizen/FFImageLoading.Tizen.csproj index 1b1678e47..06c362214 100644 --- a/source/FFImageLoading.Tizen/FFImageLoading.Tizen.csproj +++ b/source/FFImageLoading.Tizen/FFImageLoading.Tizen.csproj @@ -29,10 +29,6 @@ - - - - diff --git a/source/FFImageLoading.Touch/FFImageLoading.Touch.csproj b/source/FFImageLoading.Touch/FFImageLoading.Touch.csproj index 98603feb7..eeb0a3969 100644 --- a/source/FFImageLoading.Touch/FFImageLoading.Touch.csproj +++ b/source/FFImageLoading.Touch/FFImageLoading.Touch.csproj @@ -1,88 +1,78 @@ - - - - Debug - AnyCPU - {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - Library - FFImageLoading - Resources - FFImageLoading.Platform - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Debug - DEBUG;__UNIFIED__;__MOBILE__;__IOS__ - prompt - 4 - false - Latest - - - true - portable - true - bin\Release - prompt - 4 - false - bin\Release\FFImageLoading.Platform.xml - __UNIFIED__;__MOBILE__;__IOS__ - Latest - - - - - - - - - ..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll - - - - - - - - - - - - - - Extensions\TaskParameterExtensions.cs - - - - - - - - - - - - - - - - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - - - + + + + Debug + AnyCPU + {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {1597F7D4-432C-4F26-B508-0F6FAF0B9711} + Library + FFImageLoading + Resources + FFImageLoading.Platform + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Debug + DEBUG;__UNIFIED__;__MOBILE__;__IOS__ + prompt + 4 + false + Latest + + + true + portable + true + bin\Release + prompt + 4 + false + bin\Release\FFImageLoading.Platform.xml + __UNIFIED__;__MOBILE__;__IOS__ + Latest + + + + + + + + + ..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll + + + + + + + + + + + + Extensions\TaskParameterExtensions.cs + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Transformations.Droid/FFImageLoading.Transformations.Droid.csproj b/source/FFImageLoading.Transformations.Droid/FFImageLoading.Transformations.Droid.csproj index e9dcbc7f2..2669f8ac1 100644 --- a/source/FFImageLoading.Transformations.Droid/FFImageLoading.Transformations.Droid.csproj +++ b/source/FFImageLoading.Transformations.Droid/FFImageLoading.Transformations.Droid.csproj @@ -1,81 +1,71 @@ - - - - Debug - AnyCPU - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {BD3CEB96-93D6-47BD-9474-01DFCD320897} - Library - FFImageLoading.Transformations - Assets - Resources - Resource - FFImageLoading.Transformations - v9.0 - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Debug - ANDROID;__ANDROID__; - prompt - 4 - None - false - ANDROID;__ANDROID__; - latest - - - true - portable - true - bin\Release - ANDROID;__ANDROID__; - prompt - 4 - false - false - bin\Release\FFImageLoading.Transformations.xml - ANDROID;__ANDROID__; - latest - - - - - - - - - - - - - - - - FlipType.cs - - - - - CornerTransformType.cs - - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {74BF9402-3E13-4003-8923-BC20A1294CE2} - FFImageLoading.Droid - - - + + + + Debug + AnyCPU + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {BD3CEB96-93D6-47BD-9474-01DFCD320897} + Library + FFImageLoading.Transformations + Assets + Resources + Resource + FFImageLoading.Transformations + v9.0 + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Debug + ANDROID;__ANDROID__; + prompt + 4 + None + false + ANDROID;__ANDROID__; + latest + + + true + portable + true + bin\Release + ANDROID;__ANDROID__; + prompt + 4 + false + false + bin\Release\FFImageLoading.Transformations.xml + ANDROID;__ANDROID__; + latest + + + + + + + + + + + + + + + + FlipType.cs + + + + + CornerTransformType.cs + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Transformations.Mac/FFImageLoading.Transformations.Mac.csproj b/source/FFImageLoading.Transformations.Mac/FFImageLoading.Transformations.Mac.csproj index 56a4b7e9d..b4fd8e582 100644 --- a/source/FFImageLoading.Transformations.Mac/FFImageLoading.Transformations.Mac.csproj +++ b/source/FFImageLoading.Transformations.Mac/FFImageLoading.Transformations.Mac.csproj @@ -1,103 +1,93 @@ - - - - Debug - AnyCPU - {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0} - {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - FFImageLoading.Transformations - FFImageLoading.Transformations - v2.0 - Xamarin.Mac - Resources - 1591 - - - true - portable - false - bin\Debug - DEBUG;__MACOS__ - prompt - 4 - false - false - false - false - false - HttpClientHandler - None - None - None - - false - latest - - - true - portable - true - bin\Release - __MACOS__ - prompt - 4 - false - bin\Release\FFImageLoading.Transformations.xml - false - false - false - false - false - HttpClientHandler - None - - None - __MACOS__ - false - anycpu - latest - - - - - - - - - - - - - - - - - - - - - CornerTransformType.cs - - - FlipType.cs - - - - - - - {91825F9F-8F2D-4848-8375-68FCAA8C0DC6} - FFImageLoading.Mac - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - - - - - + + + + Debug + AnyCPU + {CFDF882F-588F-4CE4-BFBF-9D4E3A991BB0} + {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + FFImageLoading.Transformations + FFImageLoading.Transformations + v2.0 + Xamarin.Mac + Resources + 1591 + + + true + portable + false + bin\Debug + DEBUG;__MACOS__ + prompt + 4 + false + false + false + false + false + HttpClientHandler + None + None + None + + + false + latest + + + true + portable + true + bin\Release + __MACOS__ + prompt + 4 + false + bin\Release\FFImageLoading.Transformations.xml + false + false + false + false + false + HttpClientHandler + None + + + None + __MACOS__ + false + anycpu + latest + + + + + + + + + + + + + + + + + + + + + CornerTransformType.cs + + + FlipType.cs + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Transformations.Tizen/FFImageLoading.Transformations.Tizen.csproj b/source/FFImageLoading.Transformations.Tizen/FFImageLoading.Transformations.Tizen.csproj index 6b47cf6dc..cd062c901 100644 --- a/source/FFImageLoading.Transformations.Tizen/FFImageLoading.Transformations.Tizen.csproj +++ b/source/FFImageLoading.Transformations.Tizen/FFImageLoading.Transformations.Tizen.csproj @@ -20,9 +20,4 @@ - - - - - \ No newline at end of file diff --git a/source/FFImageLoading.Transformations.Touch/FFImageLoading.Transformations.Touch.csproj b/source/FFImageLoading.Transformations.Touch/FFImageLoading.Transformations.Touch.csproj index 2c64e2aa4..81ebd2fa3 100644 --- a/source/FFImageLoading.Transformations.Touch/FFImageLoading.Transformations.Touch.csproj +++ b/source/FFImageLoading.Transformations.Touch/FFImageLoading.Transformations.Touch.csproj @@ -1,78 +1,68 @@ - - - - Debug - AnyCPU - {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} - Library - FFImageLoading.Transformations - Resources - FFImageLoading.Transformations - 1591 - - - true - portable - false - bin\Debug - prompt - 4 - false - DEBUG;__UNIFIED__;__MOBILE__;__IOS__; - latest - - - true - portable - true - bin\Release - prompt - 4 - false - bin\Release\FFImageLoading.Transformations.xml - __UNIFIED__;__MOBILE__;__IOS__; - latest - - - - - - - - - - - - - - - - - - - - - FlipType.cs - - - - CornerTransformType.cs - - - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - {1597F7D4-432C-4F26-B508-0F6FAF0B9711} - FFImageLoading.Touch - - + + + + Debug + AnyCPU + {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {A19942AA-BE22-4CF5-9173-4A78D6B0EB06} + Library + FFImageLoading.Transformations + Resources + FFImageLoading.Transformations + 1591 + + + true + portable + false + bin\Debug + prompt + 4 + false + DEBUG;__UNIFIED__;__MOBILE__;__IOS__; + latest + + + true + portable + true + bin\Release + prompt + 4 + false + bin\Release\FFImageLoading.Transformations.xml + __UNIFIED__;__MOBILE__;__IOS__; + latest + + + + + + + + + + + + + + + + + + + + + FlipType.cs + + + + CornerTransformType.cs + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Transformations.Windows/FFImageLoading.Transformations.Windows.csproj b/source/FFImageLoading.Transformations.Windows/FFImageLoading.Transformations.Windows.csproj index 0f76693ba..612d02789 100644 --- a/source/FFImageLoading.Transformations.Windows/FFImageLoading.Transformations.Windows.csproj +++ b/source/FFImageLoading.Transformations.Windows/FFImageLoading.Transformations.Windows.csproj @@ -36,11 +36,6 @@ - - - - - CornerTransformType.cs diff --git a/source/FFImageLoading.Transformations.Wpf/FFImageLoading.Transformations.Wpf.csproj b/source/FFImageLoading.Transformations.Wpf/FFImageLoading.Transformations.Wpf.csproj index 9a28e9b20..b218db96a 100644 --- a/source/FFImageLoading.Transformations.Wpf/FFImageLoading.Transformations.Wpf.csproj +++ b/source/FFImageLoading.Transformations.Wpf/FFImageLoading.Transformations.Wpf.csproj @@ -58,15 +58,5 @@ - - - {0ad3a755-399a-4527-a001-6192724c67bb} - FFImageLoading - - - {dc06c582-6c7e-4018-a752-feb528c65f7e} - FFImageLoading.Wpf - - \ No newline at end of file diff --git a/source/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj b/source/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj index ae390b2a7..65e178751 100644 --- a/source/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj +++ b/source/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj @@ -35,9 +35,4 @@ - - - - - diff --git a/source/FFImageLoading.Windows/FFImageLoading.Windows.csproj b/source/FFImageLoading.Windows/FFImageLoading.Windows.csproj index c4048a742..fed76f517 100644 --- a/source/FFImageLoading.Windows/FFImageLoading.Windows.csproj +++ b/source/FFImageLoading.Windows/FFImageLoading.Windows.csproj @@ -1,107 +1,99 @@ - - - - - 12.0 - Debug - AnyCPU - {610543A5-D06F-4BCA-9443-E6ADDFF06C71} - Library - Properties - FFImageLoading - FFImageLoading.Platform - FFImageLoading.Platform.Windows - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - - Profile32 - v4.6 - 1701;1702;1705;1591;1587;NU1605 - - - true - portable - false - bin\Debug - TRACE;DEBUG;WINDOWS;__WINDOWS__; - prompt - 4 - true - Latest - - - true - portable - true - bin\Release - TRACE;WINDOWS;__WINDOWS__; - prompt - 4 - bin\Release\FFImageLoading.Platform.xml - true - Latest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Extensions\TaskParameterExtensions.cs - - - - - - - - - - - - - - - - {51ca3be2-df00-4f49-8054-e5c776992b61} - FFImageLoading - - - - - - - - - - - - - - - - + + + + + 12.0 + Debug + AnyCPU + {610543A5-D06F-4BCA-9443-E6ADDFF06C71} + Library + Properties + FFImageLoading + FFImageLoading.Platform + FFImageLoading.Platform.Windows + en-US + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + Profile32 + v4.6 + 1701;1702;1705;1591;1587;NU1605 + + + true + portable + false + bin\Debug + TRACE;DEBUG;WINDOWS;__WINDOWS__; + prompt + 4 + true + Latest + + + true + portable + true + bin\Release + TRACE;WINDOWS;__WINDOWS__; + prompt + 4 + bin\Release\FFImageLoading.Platform.xml + true + Latest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Extensions\TaskParameterExtensions.cs + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj b/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj index 6f9969225..0fbf8c22a 100644 --- a/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj +++ b/source/FFImageLoading.Wpf/FFImageLoading.Wpf.csproj @@ -77,12 +77,6 @@ - - - {0ad3a755-399a-4527-a001-6192724c67bb} - FFImageLoading - - @@ -91,6 +85,5 @@ 1.6.2 - \ No newline at end of file diff --git a/source/Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj b/source/Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj index 74a333e71..3a3c5d661 100644 --- a/source/Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj +++ b/source/Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj @@ -1,28 +1,24 @@ - - - - netcoreapp2.0 - false - 2.0.3 - - - - - - - - - - - - - - - - - - - - - - + + + + netcoreapp2.0 + false + 2.0.3 + + + + + + + + + + + + + + + + + + From 71a057443f3e53e62d60f934ffa9f9ed236ba715 Mon Sep 17 00:00:00 2001 From: Martijn van Dijk Date: Tue, 24 Sep 2019 15:08:05 +0200 Subject: [PATCH 08/15] Formatting --- README.md | 172 ++++++------- .../Droid/app.config | 20 +- .../WinUWP/Properties/Default.rd.xml | 60 ++--- .../ImageLoading.Forms.Sample/iOS/app.config | 20 +- .../Properties/Default.rd.xml | 60 ++--- .../Helpers/PreserveAttribute.cs | 2 +- .../FFImageLoading.Droid.csproj | 242 +++++++++--------- source/FFImageLoading.Forms.Droid/app.config | 20 +- source/FFImageLoading.Forms.Touch/app.config | 20 +- .../FFImageLoading.Svg.Forms.Windows.rd.xml | 66 ++--- .../FFImageLoading.Svg.Windows.rd.xml | 66 ++--- .../Decoders/BaseDecoder.cs | 66 ++--- .../Work/BitmapHolder.cs | 10 +- .../Work/PlatformImageLoaderTask.cs | 158 ++++++------ source/FFImageLoading.Windows/app.config | 8 +- 15 files changed, 495 insertions(+), 495 deletions(-) diff --git a/README.md b/README.md index dbf9cca20..e62ea5685 100644 --- a/README.md +++ b/README.md @@ -1,88 +1,88 @@ # FFImageLoading - Fast & Furious Image Loading -[![AppVeyor][ci-img]][ci-link] Buy Me A Coffee - -Library to load images quickly & easily on Xamarin.iOS, Xamarin.Android, Xamarin.Forms, Xamarin.Mac / Xamarin.Tizen and Windows (UWP, WinRT). - -*Authors: Daniel Luberda, Fabien Molinet. If you would like to help maintaining the project, just let us know!* - -| iOS / Android / Mac / Windows / Tizen | Xamarin.Forms | -|:--------------------------------:|:-------------:| -| [![NuGet][ffil-img]][ffil-link] [![NuGet][preffil-img]][preffil-link] | [![NuGet][forms-img]][forms-link] [![NuGet][preforms-img]][preforms-link] | -| [![][demo-droid-img]][demo-droid-src] [![][demo-win-img]][demo-win-src] [![][demo-mvvmcross-img]][demo-mvvmcross-src] | [![][demo-forms-img]][demo-forms-src] | - -| Addon | iOS / Android / Mac / Tizen / Windows | Xamarin.Forms | -|:-----:|:-----------------------:|:-------------:| -| Transformations | [![NuGet][trans-img]][trans-link] [![NuGet][pretrans-img]][pretrans-link] | [![NuGet][trans-img]][trans-link] [![NuGet][pretrans-img]][pretrans-link] | -| SVG support | [![NuGet][svg-img]][svg-link] [![NuGet][presvg-img]][presvg-link] | [![NuGet][svgforms-img]][svgforms-link] [![NuGet][presvgforms-img]][presvgforms-link] | - -[![NuGet][ffimageloading]][ffimageloading_large] - -## Features - -- Xamarin.iOS, Xamarin.Android, Xamarin.Forms, Xamarin.Mac, Xamarin.Tizen and Windows (WinRT, UWP) support -- Configurable disk and memory caching -- Multiple image views using the same image source (url, path, resource) will use only one bitmap which is cached in memory (less memory usage) -- Deduplication of similar download/load requests. *(If 100 similar requests arrive at same time then one real loading will be performed while 99 others will wait).* -- Error and loading placeholders support -- Images can be automatically downsampled to specified size (less memory usage) -- Fluent API which is inspired by Picasso naming -- SVG / WebP / GIF support -- Image loading Fade-In animations support -- Can retry image downloads (RetryCount, RetryDelay) -- Android bitmap optimization. Saves 50% of memory by trying not to use transparency channel when possible. -- Transformations support - - BlurredTransformation - - CircleTransformation, RoundedTransformation, CornersTransformation, CropTransformation - - ColorSpaceTransformation, GrayscaleTransformation, SepiaTransformation, TintTransformation - - FlipTransformation, RotateTransformation - - Supports custom transformations (native platform `ITransformation` implementations) - -## Documentation - -https://github.com/luberda-molinet/FFImageLoading/wiki - -[what-is-this]: various_images_and_image_links - -[ci-img]: https://img.shields.io/appveyor/ci/daniel-luberda/ffimageloading.svg -[ci-link]: https://ci.appveyor.com/project/daniel-luberda/ffimageloading - -[donate-img]: https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png -[donate-link]: https://www.buymeacoffee.com/AU3KQCy6N - -[ffil-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.svg -[ffil-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading -[forms-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.Forms.svg -[forms-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Forms -[trans-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.Transformations.svg -[trans-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Transformations -[svg-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.Svg.svg -[svg-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Svg -[svgforms-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.Svg.Forms.svg -[svgforms-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Svg.Forms - -[preffil-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.svg -[preffil-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading -[preforms-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.Forms.svg -[preforms-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Forms -[pretrans-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.Transformations.svg -[pretrans-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Transformations -[presvg-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.Svg.svg -[presvg-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Svg -[presvgforms-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.Svg.Forms.svg -[presvgforms-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Svg.Forms - -[ffimageloading_large]: https://raw.githubusercontent.com/luberda-molinet/FFImageLoading/master/samples/Screenshots/ffimageloading_large.png -[ffimageloading]: https://raw.githubusercontent.com/luberda-molinet/FFImageLoading/master/samples/Screenshots/ffimageloading.png - -[demo-forms-img]: https://img.shields.io/badge/demo-xamarin.forms-orange.svg -[demo-forms-src]: https://github.com/luberda-molinet/FFImageLoading/tree/master/samples/ImageLoading.Forms.Sample -[demo-droid-img]: https://img.shields.io/badge/demo-android-orange.svg -[demo-droid-src]: https://github.com/luberda-molinet/FFImageLoading/tree/master/samples/ImageLoading.MvvmCross.Sample -[demo-mvvmcross-img]: https://img.shields.io/badge/demo-mvvmcross-orange.svg -[demo-mvvmcross-src]: https://github.com/luberda-molinet/FFImageLoading/tree/master/samples/ImageLoading.Sample -[demo-win-img]: https://img.shields.io/badge/demo-win-orange.svg -[demo-win-src]: https://github.com/luberda-molinet/FFImageLoading/tree/master/samples/Simple.WinPhone.Sample -[dev-nugets-img]: https://img.shields.io/badge/nugets-dev-yellow.svg -[dev-nugets]: https://github.com/luberda-molinet/FFImageLoading/wiki/Dev-NuGet-packages - +[![AppVeyor][ci-img]][ci-link] Buy Me A Coffee + +Library to load images quickly & easily on Xamarin.iOS, Xamarin.Android, Xamarin.Forms, Xamarin.Mac / Xamarin.Tizen and Windows (UWP, WinRT). + +*Authors: Daniel Luberda, Fabien Molinet. If you would like to help maintaining the project, just let us know!* + +| iOS / Android / Mac / Windows / Tizen | Xamarin.Forms | +|:--------------------------------:|:-------------:| +| [![NuGet][ffil-img]][ffil-link] [![NuGet][preffil-img]][preffil-link] | [![NuGet][forms-img]][forms-link] [![NuGet][preforms-img]][preforms-link] | +| [![][demo-droid-img]][demo-droid-src] [![][demo-win-img]][demo-win-src] [![][demo-mvvmcross-img]][demo-mvvmcross-src] | [![][demo-forms-img]][demo-forms-src] | + +| Addon | iOS / Android / Mac / Tizen / Windows | Xamarin.Forms | +|:-----:|:-----------------------:|:-------------:| +| Transformations | [![NuGet][trans-img]][trans-link] [![NuGet][pretrans-img]][pretrans-link] | [![NuGet][trans-img]][trans-link] [![NuGet][pretrans-img]][pretrans-link] | +| SVG support | [![NuGet][svg-img]][svg-link] [![NuGet][presvg-img]][presvg-link] | [![NuGet][svgforms-img]][svgforms-link] [![NuGet][presvgforms-img]][presvgforms-link] | + +[![NuGet][ffimageloading]][ffimageloading_large] + +## Features + +- Xamarin.iOS, Xamarin.Android, Xamarin.Forms, Xamarin.Mac, Xamarin.Tizen and Windows (WinRT, UWP) support +- Configurable disk and memory caching +- Multiple image views using the same image source (url, path, resource) will use only one bitmap which is cached in memory (less memory usage) +- Deduplication of similar download/load requests. *(If 100 similar requests arrive at same time then one real loading will be performed while 99 others will wait).* +- Error and loading placeholders support +- Images can be automatically downsampled to specified size (less memory usage) +- Fluent API which is inspired by Picasso naming +- SVG / WebP / GIF support +- Image loading Fade-In animations support +- Can retry image downloads (RetryCount, RetryDelay) +- Android bitmap optimization. Saves 50% of memory by trying not to use transparency channel when possible. +- Transformations support + - BlurredTransformation + - CircleTransformation, RoundedTransformation, CornersTransformation, CropTransformation + - ColorSpaceTransformation, GrayscaleTransformation, SepiaTransformation, TintTransformation + - FlipTransformation, RotateTransformation + - Supports custom transformations (native platform `ITransformation` implementations) + +## Documentation + +https://github.com/luberda-molinet/FFImageLoading/wiki + +[what-is-this]: various_images_and_image_links + +[ci-img]: https://img.shields.io/appveyor/ci/daniel-luberda/ffimageloading.svg +[ci-link]: https://ci.appveyor.com/project/daniel-luberda/ffimageloading + +[donate-img]: https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png +[donate-link]: https://www.buymeacoffee.com/AU3KQCy6N + +[ffil-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.svg +[ffil-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading +[forms-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.Forms.svg +[forms-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Forms +[trans-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.Transformations.svg +[trans-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Transformations +[svg-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.Svg.svg +[svg-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Svg +[svgforms-img]: https://img.shields.io/nuget/v/Xamarin.FFImageLoading.Svg.Forms.svg +[svgforms-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Svg.Forms + +[preffil-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.svg +[preffil-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading +[preforms-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.Forms.svg +[preforms-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Forms +[pretrans-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.Transformations.svg +[pretrans-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Transformations +[presvg-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.Svg.svg +[presvg-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Svg +[presvgforms-img]: https://img.shields.io/nuget/vpre/Xamarin.FFImageLoading.Svg.Forms.svg +[presvgforms-link]: https://www.nuget.org/packages/Xamarin.FFImageLoading.Svg.Forms + +[ffimageloading_large]: https://raw.githubusercontent.com/luberda-molinet/FFImageLoading/master/samples/Screenshots/ffimageloading_large.png +[ffimageloading]: https://raw.githubusercontent.com/luberda-molinet/FFImageLoading/master/samples/Screenshots/ffimageloading.png + +[demo-forms-img]: https://img.shields.io/badge/demo-xamarin.forms-orange.svg +[demo-forms-src]: https://github.com/luberda-molinet/FFImageLoading/tree/master/samples/ImageLoading.Forms.Sample +[demo-droid-img]: https://img.shields.io/badge/demo-android-orange.svg +[demo-droid-src]: https://github.com/luberda-molinet/FFImageLoading/tree/master/samples/ImageLoading.MvvmCross.Sample +[demo-mvvmcross-img]: https://img.shields.io/badge/demo-mvvmcross-orange.svg +[demo-mvvmcross-src]: https://github.com/luberda-molinet/FFImageLoading/tree/master/samples/ImageLoading.Sample +[demo-win-img]: https://img.shields.io/badge/demo-win-orange.svg +[demo-win-src]: https://github.com/luberda-molinet/FFImageLoading/tree/master/samples/Simple.WinPhone.Sample +[dev-nugets-img]: https://img.shields.io/badge/nugets-dev-yellow.svg +[dev-nugets]: https://github.com/luberda-molinet/FFImageLoading/wiki/Dev-NuGet-packages + diff --git a/samples/ImageLoading.Forms.Sample/Droid/app.config b/samples/ImageLoading.Forms.Sample/Droid/app.config index 86de0f2b6..4dd3b43c8 100644 --- a/samples/ImageLoading.Forms.Sample/Droid/app.config +++ b/samples/ImageLoading.Forms.Sample/Droid/app.config @@ -1,11 +1,11 @@ - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/WinUWP/Properties/Default.rd.xml b/samples/ImageLoading.Forms.Sample/WinUWP/Properties/Default.rd.xml index 74b03e3f8..af00722cd 100644 --- a/samples/ImageLoading.Forms.Sample/WinUWP/Properties/Default.rd.xml +++ b/samples/ImageLoading.Forms.Sample/WinUWP/Properties/Default.rd.xml @@ -1,31 +1,31 @@ - - - - - - - - - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/iOS/app.config b/samples/ImageLoading.Forms.Sample/iOS/app.config index 86de0f2b6..4dd3b43c8 100644 --- a/samples/ImageLoading.Forms.Sample/iOS/app.config +++ b/samples/ImageLoading.Forms.Sample/iOS/app.config @@ -1,11 +1,11 @@ - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/samples/Simple.WinUniversal.Sample/Properties/Default.rd.xml b/samples/Simple.WinUniversal.Sample/Properties/Default.rd.xml index 461bc4c13..80a960ce3 100644 --- a/samples/Simple.WinUniversal.Sample/Properties/Default.rd.xml +++ b/samples/Simple.WinUniversal.Sample/Properties/Default.rd.xml @@ -1,31 +1,31 @@ - - - - - - - - - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Common/Helpers/PreserveAttribute.cs b/source/FFImageLoading.Common/Helpers/PreserveAttribute.cs index d22f347fe..c33f8eb3a 100644 --- a/source/FFImageLoading.Common/Helpers/PreserveAttribute.cs +++ b/source/FFImageLoading.Common/Helpers/PreserveAttribute.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("FFImageLoading.Transformations"), InternalsVisibleTo("FFImageLoading.Svg.Forms")] diff --git a/source/FFImageLoading.Droid/FFImageLoading.Droid.csproj b/source/FFImageLoading.Droid/FFImageLoading.Droid.csproj index e30735d13..597059088 100644 --- a/source/FFImageLoading.Droid/FFImageLoading.Droid.csproj +++ b/source/FFImageLoading.Droid/FFImageLoading.Droid.csproj @@ -1,121 +1,121 @@ - - - - Debug - AnyCPU - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - {74BF9402-3E13-4003-8923-BC20A1294CE2} - Library - FFImageLoading - Assets - Resources - Resource - FFImageLoading.Platform - v8.1 - 1701;1702;1705;1591;1587;NU1605;NU1605 - - - true - portable - false - bin\Debug - DEBUG;ANDROID;__ANDROID__ - prompt - 4 - None - false - DEBUG;ANDROID;__ANDROID__ - Latest - - - true - portable - true - bin\Release - prompt - 4 - false - false - bin\Release\FFImageLoading.Platform.xml - ANDROID;__ANDROID__ - Latest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Extensions\TaskParameterExtensions.cs - - - - - - - - - - - - - - - - - - - - - - - {51CA3BE2-DF00-4F49-8054-E5C776992B61} - FFImageLoading - - - - - - + + + + Debug + AnyCPU + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {74BF9402-3E13-4003-8923-BC20A1294CE2} + Library + FFImageLoading + Assets + Resources + Resource + FFImageLoading.Platform + v8.1 + 1701;1702;1705;1591;1587;NU1605;NU1605 + + + true + portable + false + bin\Debug + DEBUG;ANDROID;__ANDROID__ + prompt + 4 + None + false + DEBUG;ANDROID;__ANDROID__ + Latest + + + true + portable + true + bin\Release + prompt + 4 + false + false + bin\Release\FFImageLoading.Platform.xml + ANDROID;__ANDROID__ + Latest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Extensions\TaskParameterExtensions.cs + + + + + + + + + + + + + + + + + + + + + + + {51CA3BE2-DF00-4F49-8054-E5C776992B61} + FFImageLoading + + + + + + diff --git a/source/FFImageLoading.Forms.Droid/app.config b/source/FFImageLoading.Forms.Droid/app.config index 86de0f2b6..4dd3b43c8 100644 --- a/source/FFImageLoading.Forms.Droid/app.config +++ b/source/FFImageLoading.Forms.Droid/app.config @@ -1,11 +1,11 @@ - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Forms.Touch/app.config b/source/FFImageLoading.Forms.Touch/app.config index 86de0f2b6..4dd3b43c8 100644 --- a/source/FFImageLoading.Forms.Touch/app.config +++ b/source/FFImageLoading.Forms.Touch/app.config @@ -1,11 +1,11 @@ - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Svg.Forms.Windows/Properties/FFImageLoading.Svg.Forms.Windows.rd.xml b/source/FFImageLoading.Svg.Forms.Windows/Properties/FFImageLoading.Svg.Forms.Windows.rd.xml index e00028317..f5a1a8202 100644 --- a/source/FFImageLoading.Svg.Forms.Windows/Properties/FFImageLoading.Svg.Forms.Windows.rd.xml +++ b/source/FFImageLoading.Svg.Forms.Windows/Properties/FFImageLoading.Svg.Forms.Windows.rd.xml @@ -1,33 +1,33 @@ - - - - - - - - - + + + + + + + + + diff --git a/source/FFImageLoading.Svg.Windows/Properties/FFImageLoading.Svg.Windows.rd.xml b/source/FFImageLoading.Svg.Windows/Properties/FFImageLoading.Svg.Windows.rd.xml index a1e5c44cc..dfcef96a4 100644 --- a/source/FFImageLoading.Svg.Windows/Properties/FFImageLoading.Svg.Windows.rd.xml +++ b/source/FFImageLoading.Svg.Windows/Properties/FFImageLoading.Svg.Windows.rd.xml @@ -1,33 +1,33 @@ - - - - - - - - - + + + + + + + + + diff --git a/source/FFImageLoading.Windows/Decoders/BaseDecoder.cs b/source/FFImageLoading.Windows/Decoders/BaseDecoder.cs index e85070307..dc64467a0 100644 --- a/source/FFImageLoading.Windows/Decoders/BaseDecoder.cs +++ b/source/FFImageLoading.Windows/Decoders/BaseDecoder.cs @@ -1,39 +1,39 @@ -using FFImageLoading.Config; -using FFImageLoading.Extensions; -using FFImageLoading.Helpers; -using FFImageLoading.Work; +using FFImageLoading.Config; +using FFImageLoading.Extensions; +using FFImageLoading.Helpers; +using FFImageLoading.Work; using System; -using System.IO; -using System.Threading.Tasks; - +using System.IO; +using System.Threading.Tasks; + namespace FFImageLoading.Decoders { public class BaseDecoder : IDecoder - { - public async Task> DecodeAsync(Stream imageData, string path, ImageSource source, ImageInformation imageInformation, TaskParameter parameters) - { - BitmapHolder imageIn = null; - - if (imageData == null) - throw new ArgumentNullException(nameof(imageData)); - - bool allowUpscale = parameters.AllowUpscale ?? Configuration.AllowUpscale; - - if (parameters.Transformations == null || parameters.Transformations.Count == 0) - { - var bitmap = await imageData.ToBitmapImageAsync(parameters.DownSampleSize, parameters.DownSampleUseDipUnits, parameters.DownSampleInterpolationMode, allowUpscale, imageInformation).ConfigureAwait(false); - imageIn = new BitmapHolder(bitmap); - } - else - { - imageIn = await imageData.ToBitmapHolderAsync(parameters.DownSampleSize, parameters.DownSampleUseDipUnits, parameters.DownSampleInterpolationMode, allowUpscale, imageInformation).ConfigureAwait(false); - } - - return new DecodedImage() { Image = imageIn }; - } - - public Configuration Configuration => ImageService.Instance.Config; - - public IMiniLogger Logger => ImageService.Instance.Config.Logger; + { + public async Task> DecodeAsync(Stream imageData, string path, ImageSource source, ImageInformation imageInformation, TaskParameter parameters) + { + BitmapHolder imageIn = null; + + if (imageData == null) + throw new ArgumentNullException(nameof(imageData)); + + bool allowUpscale = parameters.AllowUpscale ?? Configuration.AllowUpscale; + + if (parameters.Transformations == null || parameters.Transformations.Count == 0) + { + var bitmap = await imageData.ToBitmapImageAsync(parameters.DownSampleSize, parameters.DownSampleUseDipUnits, parameters.DownSampleInterpolationMode, allowUpscale, imageInformation).ConfigureAwait(false); + imageIn = new BitmapHolder(bitmap); + } + else + { + imageIn = await imageData.ToBitmapHolderAsync(parameters.DownSampleSize, parameters.DownSampleUseDipUnits, parameters.DownSampleInterpolationMode, allowUpscale, imageInformation).ConfigureAwait(false); + } + + return new DecodedImage() { Image = imageIn }; + } + + public Configuration Configuration => ImageService.Instance.Config; + + public IMiniLogger Logger => ImageService.Instance.Config.Logger; } } diff --git a/source/FFImageLoading.Windows/Work/BitmapHolder.cs b/source/FFImageLoading.Windows/Work/BitmapHolder.cs index 9033f3b74..196240239 100644 --- a/source/FFImageLoading.Windows/Work/BitmapHolder.cs +++ b/source/FFImageLoading.Windows/Work/BitmapHolder.cs @@ -2,15 +2,15 @@ using FFImageLoading.Helpers; using System; using Windows.UI; -using Windows.UI.Xaml.Media.Imaging; - +using Windows.UI.Xaml.Media.Imaging; + namespace FFImageLoading.Work { public class BitmapHolder : IBitmap { - public BitmapHolder(WriteableBitmap bitmap) - { - WriteableBitmap = bitmap; + public BitmapHolder(WriteableBitmap bitmap) + { + WriteableBitmap = bitmap; } public BitmapHolder(byte[] pixels, int width, int height) diff --git a/source/FFImageLoading.Windows/Work/PlatformImageLoaderTask.cs b/source/FFImageLoading.Windows/Work/PlatformImageLoaderTask.cs index bc2044928..e137419a2 100644 --- a/source/FFImageLoading.Windows/Work/PlatformImageLoaderTask.cs +++ b/source/FFImageLoading.Windows/Work/PlatformImageLoaderTask.cs @@ -8,9 +8,9 @@ using System.Threading; using System.Threading.Tasks; using Windows.UI.Xaml.Media.Imaging; -using FFImageLoading.Decoders; -using System.Collections.Generic; - +using FFImageLoading.Decoders; +using System.Collections.Generic; + namespace FFImageLoading.Work { public class PlatformImageLoaderTask : ImageLoaderTask where TImageView : class @@ -40,82 +40,82 @@ await MainThreadDispatcher.PostAsync(() => protected override int DpiToPixels(int size) { return size.DpToPixels(); - } - - protected override IDecoder ResolveDecoder(ImageInformation.ImageType type) - { - switch (type) - { - case ImageInformation.ImageType.GIF: - case ImageInformation.ImageType.WEBP: - throw new NotImplementedException(); - default: - return new BaseDecoder(); - } - } - - protected override async Task TransformAsync(BitmapHolder bitmap, IList transformations, string path, ImageSource source, bool isPlaceholder) - { - await StaticLocks.DecodingLock.WaitAsync(CancellationTokenSource.Token).ConfigureAwait(false); // Applying transformations is both CPU and memory intensive - ThrowIfCancellationRequested(); - - try - { - foreach (var transformation in transformations) - { - ThrowIfCancellationRequested(); - - var old = bitmap; - - try - { - IBitmap bitmapHolder = transformation.Transform(bitmap, path, source, isPlaceholder, Key); - bitmap = bitmapHolder.ToNative(); - } - catch (Exception ex) - { - Logger.Error(string.Format("Transformation failed: {0}", transformation.Key), ex); - throw; - } - finally - { - if (old != null && old != bitmap && old.PixelData != bitmap.PixelData) - { - old.FreePixels(); - old = null; - } - } - } - } - finally + } + + protected override IDecoder ResolveDecoder(ImageInformation.ImageType type) + { + switch (type) + { + case ImageInformation.ImageType.GIF: + case ImageInformation.ImageType.WEBP: + throw new NotImplementedException(); + default: + return new BaseDecoder(); + } + } + + protected override async Task TransformAsync(BitmapHolder bitmap, IList transformations, string path, ImageSource source, bool isPlaceholder) + { + await StaticLocks.DecodingLock.WaitAsync(CancellationTokenSource.Token).ConfigureAwait(false); // Applying transformations is both CPU and memory intensive + ThrowIfCancellationRequested(); + + try + { + foreach (var transformation in transformations) + { + ThrowIfCancellationRequested(); + + var old = bitmap; + + try + { + IBitmap bitmapHolder = transformation.Transform(bitmap, path, source, isPlaceholder, Key); + bitmap = bitmapHolder.ToNative(); + } + catch (Exception ex) + { + Logger.Error(string.Format("Transformation failed: {0}", transformation.Key), ex); + throw; + } + finally + { + if (old != null && old != bitmap && old.PixelData != bitmap.PixelData) + { + old.FreePixels(); + old = null; + } + } + } + } + finally + { + StaticLocks.DecodingLock.Release(); + } + + return bitmap; + } + + protected override async Task GenerateImageFromDecoderContainerAsync(IDecodedImage decoded, ImageInformation imageInformation, bool isPlaceholder) + { + if (decoded.IsAnimated) + { + throw new NotImplementedException(); + } + else { - StaticLocks.DecodingLock.Release(); - } - - return bitmap; - } - - protected override async Task GenerateImageFromDecoderContainerAsync(IDecodedImage decoded, ImageInformation imageInformation, bool isPlaceholder) - { - if (decoded.IsAnimated) - { - throw new NotImplementedException(); - } - else - { - try - { - if (decoded.Image.HasWriteableBitmap) - return decoded.Image.WriteableBitmap; - - return await decoded.Image.ToBitmapImageAsync().ConfigureAwait(false); - } - finally - { - decoded.Image.FreePixels(); - decoded.Image = null; - } - } - } + try + { + if (decoded.Image.HasWriteableBitmap) + return decoded.Image.WriteableBitmap; + + return await decoded.Image.ToBitmapImageAsync().ConfigureAwait(false); + } + finally + { + decoded.Image.FreePixels(); + decoded.Image = null; + } + } + } } } diff --git a/source/FFImageLoading.Windows/app.config b/source/FFImageLoading.Windows/app.config index e52c6fa43..f3ed3d893 100644 --- a/source/FFImageLoading.Windows/app.config +++ b/source/FFImageLoading.Windows/app.config @@ -1,5 +1,5 @@ - - - - + + + + \ No newline at end of file From acbdbe39415d7a25f02f0865f9eae4e26c0e6bf5 Mon Sep 17 00:00:00 2001 From: Martijn van Dijk Date: Tue, 24 Sep 2019 15:10:10 +0200 Subject: [PATCH 09/15] Add project --- FFImageLoading.sln | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/FFImageLoading.sln b/FFImageLoading.sln index effd58f55..6979336bc 100644 --- a/FFImageLoading.sln +++ b/FFImageLoading.sln @@ -59,6 +59,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionItems", "SolutionIt README.md = README.md EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading", "FFImageLoading\FFImageLoading.csproj", "{1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -453,6 +455,30 @@ Global {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x64.Build.0 = Release|Any CPU {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x86.ActiveCfg = Release|Any CPU {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|x86.Build.0 = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|ARM.ActiveCfg = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|ARM.Build.0 = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|iPhone.Build.0 = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|x64.ActiveCfg = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|x64.Build.0 = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|x86.ActiveCfg = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Debug|x86.Build.0 = Debug|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|Any CPU.Build.0 = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|ARM.ActiveCfg = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|ARM.Build.0 = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|iPhone.ActiveCfg = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|iPhone.Build.0 = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|x64.ActiveCfg = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|x64.Build.0 = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|x86.ActiveCfg = Release|Any CPU + {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From f1b523416e25ca0b09e86165393cce3379b1f209 Mon Sep 17 00:00:00 2001 From: Martijn van Dijk Date: Tue, 24 Sep 2019 16:12:33 +0200 Subject: [PATCH 10/15] Clean project files of samples --- Directory.build.props | 2 +- FFImageLoading/FFImageLoading.csproj | 11 +- LICENSE.md | 2 +- .../FFImageLoading.Forms.Sample.Droid.csproj | 195 ------------------ .../Droid/app.config | 11 - .../Droid/packages.config | 46 ----- .../FFImageLoading.Forms.Sample.Mac.csproj | 27 --- .../Mac/packages.config | 7 - .../Shared/FFImageLoading.Forms.Sample.csproj | 45 ++-- .../FFImageLoading.Forms.Sample.Tizen.csproj | 3 +- .../FFImageLoading.Forms.Sample.iOS.csproj | 28 --- .../ImageLoading.Forms.Sample/iOS/app.config | 11 - .../iOS/packages.config | 7 - ...FImageLoading.MvvmCross.Sample.Core.csproj | 58 +----- .../packages.config | 7 - ...ImageLoading.MvvmCross.Sample.Droid.csproj | 134 ------------ .../packages.config | 35 ---- ...FFImageLoading.MvvmCross.Sample.iOS.csproj | 25 --- .../packages.config | 8 - .../Simple.Android.Sample.csproj | 145 ------------- samples/ImageLoading.Sample/packages.config | 37 ---- .../Simple.iOS.Sample.csproj | 4 - samples/Simple.iOS.Sample/packages.config | 4 - 23 files changed, 28 insertions(+), 824 deletions(-) delete mode 100644 samples/ImageLoading.Forms.Sample/Droid/app.config delete mode 100644 samples/ImageLoading.Forms.Sample/Droid/packages.config delete mode 100644 samples/ImageLoading.Forms.Sample/Mac/packages.config delete mode 100644 samples/ImageLoading.Forms.Sample/iOS/app.config delete mode 100644 samples/ImageLoading.Forms.Sample/iOS/packages.config delete mode 100644 samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/packages.config delete mode 100644 samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/packages.config delete mode 100644 samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/packages.config delete mode 100644 samples/ImageLoading.Sample/packages.config delete mode 100644 samples/Simple.iOS.Sample/packages.config diff --git a/Directory.build.props b/Directory.build.props index f57320a3b..091cbe983 100644 --- a/Directory.build.props +++ b/Directory.build.props @@ -46,7 +46,7 @@ - + diff --git a/FFImageLoading/FFImageLoading.csproj b/FFImageLoading/FFImageLoading.csproj index 5f6d4bdfb..9bfa9bc7e 100644 --- a/FFImageLoading/FFImageLoading.csproj +++ b/FFImageLoading/FFImageLoading.csproj @@ -47,11 +47,6 @@ - - - - - @@ -104,15 +99,11 @@ - - - - + diff --git a/LICENSE.md b/LICENSE.md index a749837bd..fa04eb5c1 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2015 Daniel Luberda & Fabien Molinet +Copyright (c) 2019 Daniel Luberda & Fabien Molinet Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/samples/ImageLoading.Forms.Sample/Droid/FFImageLoading.Forms.Sample.Droid.csproj b/samples/ImageLoading.Forms.Sample/Droid/FFImageLoading.Forms.Sample.Droid.csproj index 70fe126d1..34cbdd6bb 100644 --- a/samples/ImageLoading.Forms.Sample/Droid/FFImageLoading.Forms.Sample.Droid.csproj +++ b/samples/ImageLoading.Forms.Sample/Droid/FFImageLoading.Forms.Sample.Droid.csproj @@ -1,6 +1,5 @@  - Debug AnyCPU @@ -56,163 +55,16 @@ - - ..\..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Common.dll - - - ..\..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Common.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Runtime.dll - - - ..\..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll - - - ..\..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll - - - ..\..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll - - - ..\..\..\packages\Xamarin.Android.Support.Exif.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Exif.dll - - - ..\..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Fragment.dll - - - ..\..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Media.Compat.dll - - - ..\..\..\packages\Xamarin.Android.Support.Transition.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Transition.dll - - - ..\..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v4.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.CardView.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.Palette.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.Palette.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll - - - ..\..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Vector.Drawable.dll - - - ..\..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Animated.Vector.Drawable.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.AppCompat.dll - - - ..\..\..\packages\Xamarin.Android.Support.Design.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Design.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.MediaRouter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.MediaRouter.dll - - - ..\..\..\packages\SkiaSharp.1.68.0\lib\MonoAndroid\SkiaSharp.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Core.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Forms.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\FormsViewGroup.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Core.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Platform.Android.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Platform.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\MonoAndroid90\Xamarin.Forms.Xaml.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Core.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Runtime.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.Core.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.Core.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll - - - ..\..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll - - - ..\..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll - - - ..\..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll - - - ..\..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll - - - ..\..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll - - - ..\..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll - - - ..\..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll - - - ..\..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll - - - ..\..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll - - - ..\..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll - - - ..\..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll - - - ..\..\..\packages\Xamarin.Android.Support.CustomTabs.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomTabs.dll - - - - @@ -233,51 +85,4 @@ - - - {3A682234-5918-4F58-B02B-598A59C6A7BD} - FFImageLoading.Forms.Sample - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Droid/app.config b/samples/ImageLoading.Forms.Sample/Droid/app.config deleted file mode 100644 index 4dd3b43c8..000000000 --- a/samples/ImageLoading.Forms.Sample/Droid/app.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Droid/packages.config b/samples/ImageLoading.Forms.Sample/Droid/packages.config deleted file mode 100644 index 58a1600e9..000000000 --- a/samples/ImageLoading.Forms.Sample/Droid/packages.config +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Mac/FFImageLoading.Forms.Sample.Mac.csproj b/samples/ImageLoading.Forms.Sample/Mac/FFImageLoading.Forms.Sample.Mac.csproj index 771a699da..5729d0f24 100644 --- a/samples/ImageLoading.Forms.Sample/Mac/FFImageLoading.Forms.Sample.Mac.csproj +++ b/samples/ImageLoading.Forms.Sample/Mac/FFImageLoading.Forms.Sample.Mac.csproj @@ -1,6 +1,5 @@  - Debug AnyCPU @@ -62,30 +61,6 @@ - - ..\..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.Mac20\WebP.Mac.dll - - - ..\..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.Mac20\SkiaSharp.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Core.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Forms.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Core.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Platform.macOS.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.Mac\Xamarin.Forms.Xaml.dll - @@ -105,7 +80,6 @@ - @@ -134,5 +108,4 @@ - \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Mac/packages.config b/samples/ImageLoading.Forms.Sample/Mac/packages.config deleted file mode 100644 index 190d02600..000000000 --- a/samples/ImageLoading.Forms.Sample/Mac/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Shared/FFImageLoading.Forms.Sample.csproj b/samples/ImageLoading.Forms.Sample/Shared/FFImageLoading.Forms.Sample.csproj index 2a38265b0..4929fd31e 100644 --- a/samples/ImageLoading.Forms.Sample/Shared/FFImageLoading.Forms.Sample.csproj +++ b/samples/ImageLoading.Forms.Sample/Shared/FFImageLoading.Forms.Sample.csproj @@ -1,43 +1,30 @@ - + - - netstandard2.0 - Shared - Shared - false - false - false - false - false - false - false - false - false - 2.0.2 - + + + netstandard2.0 + true + + + + pdbonly + true + + - + - - + - - - - + tenor.gif - - - - - - + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Tizen/FFImageLoading.Forms.Sample.Tizen.csproj b/samples/ImageLoading.Forms.Sample/Tizen/FFImageLoading.Forms.Sample.Tizen.csproj index 8837c2bc1..0cefe1dec 100644 --- a/samples/ImageLoading.Forms.Sample/Tizen/FFImageLoading.Forms.Sample.Tizen.csproj +++ b/samples/ImageLoading.Forms.Sample/Tizen/FFImageLoading.Forms.Sample.Tizen.csproj @@ -1,4 +1,4 @@ - + Exe @@ -10,7 +10,6 @@ Runtime - diff --git a/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj b/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj index 14d9780f5..7a027a972 100644 --- a/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj +++ b/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj @@ -1,6 +1,5 @@  - Debug iPhoneSimulator @@ -76,30 +75,6 @@ - - ..\..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll - - - ..\..\..\packages\SkiaSharp.1.68.0\lib\Xamarin.iOS\SkiaSharp.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Core.dll - - - ..\..\..\packages\Xamvvm.Forms.1.0.5\lib\portable-net45+wp8+wpa81+win8+MonoAndroid10+MonoTouch10+Xamarin.iOS10+netstandard1.0\Xamvvm.Forms.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Core.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Platform.iOS.dll - - - ..\..\..\packages\Xamarin.Forms.3.6.0.344457\lib\Xamarin.iOS10\Xamarin.Forms.Xaml.dll - @@ -116,10 +91,8 @@ - - @@ -141,5 +114,4 @@ - \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/iOS/app.config b/samples/ImageLoading.Forms.Sample/iOS/app.config deleted file mode 100644 index 4dd3b43c8..000000000 --- a/samples/ImageLoading.Forms.Sample/iOS/app.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/iOS/packages.config b/samples/ImageLoading.Forms.Sample/iOS/packages.config deleted file mode 100644 index 9d0818851..000000000 --- a/samples/ImageLoading.Forms.Sample/iOS/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/FFImageLoading.MvvmCross.Sample.Core.csproj b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/FFImageLoading.MvvmCross.Sample.Core.csproj index 6db98919e..c6e7a9752 100644 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/FFImageLoading.MvvmCross.Sample.Core.csproj +++ b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/FFImageLoading.MvvmCross.Sample.Core.csproj @@ -1,56 +1,14 @@  - + + - Debug - AnyCPU - {087DE224-30F0-4FEF-A960-F93F04182BA6} - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - true - Library - FFImageLoading.MvvmCross.Sample.Core - FFImageLoading.MvvmCross.Sample.Core - v4.5 - Profile111 + netstandard2.0 + true - + + + pdbonly true - full - false - bin\Debug - DEBUG; - prompt - 4 - - true - bin\Release - prompt - 4 - - - - - - - - - - - - ..\..\..\packages\MvvmCross.Platform.5.6.3\lib\portable-net45+win+wpa81+wp80\MvvmCross.Platform.dll - - - ..\..\..\packages\MvvmCross.Core.5.6.3\lib\portable-net45+win+wpa81+wp80\MvvmCross.Core.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\portable-net45+win+wpa81+wp80\MvvmCross.Binding.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\portable-net45+win+wpa81+wp80\MvvmCross.Localization.dll - - - - - - + \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/packages.config b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/packages.config deleted file mode 100644 index 798da64af..000000000 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/FFImageLoading.MvvmCross.Sample.Droid.csproj b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/FFImageLoading.MvvmCross.Sample.Droid.csproj index 96e45369d..ff1d09dd1 100644 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/FFImageLoading.MvvmCross.Sample.Droid.csproj +++ b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/FFImageLoading.MvvmCross.Sample.Droid.csproj @@ -43,115 +43,9 @@ - - ..\..\..\packages\MvvmCross.Platform.5.6.3\lib\MonoAndroid\MvvmCross.Platform.dll - - - ..\..\..\packages\MvvmCross.Platform.5.6.3\lib\MonoAndroid\MvvmCross.Platform.Droid.dll - - - ..\..\..\packages\MvvmCross.Core.5.6.3\lib\MonoAndroid\MvvmCross.Core.dll - - - ..\..\..\packages\MvvmCross.Core.5.6.3\lib\MonoAndroid\MvvmCross.Droid.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\MonoAndroid\MvvmCross.Binding.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\MonoAndroid\MvvmCross.Binding.Droid.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\MonoAndroid\MvvmCross.Localization.dll - - - ..\..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Common.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Common.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Runtime.dll - - - ..\..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll - - - ..\..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll - - - ..\..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll - - - ..\..\..\packages\MvvmCross.Droid.Support.V7.RecyclerView.5.6.3\lib\MonoAndroid70\MvvmCross.Droid.Support.V7.RecyclerView.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Core.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Runtime.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.Core.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.Core.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.dll - - - ..\..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll - - - ..\..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll - - - ..\..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll - - - ..\..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll - - - ..\..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll - - - ..\..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll - - - ..\..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll - - - ..\..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll - - - ..\..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll - - - ..\..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll - - - ..\..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll - - - ..\..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll - - - ..\..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll - - - ..\..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll - - @@ -161,7 +55,6 @@ - @@ -184,31 +77,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/packages.config b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/packages.config deleted file mode 100644 index 50b117505..000000000 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/packages.config +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj index 8e89c0c19..6db8791d2 100644 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj +++ b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj @@ -84,30 +84,6 @@ - - ..\..\..\packages\MvvmCross.Platform.5.6.3\lib\Xamarin.iOS10\MvvmCross.Platform.dll - - - ..\..\..\packages\MvvmCross.Platform.5.6.3\lib\Xamarin.iOS10\MvvmCross.Platform.iOS.dll - - - ..\..\..\packages\MvvmCross.Core.5.6.3\lib\Xamarin.iOS10\MvvmCross.Core.dll - - - ..\..\..\packages\MvvmCross.Core.5.6.3\lib\Xamarin.iOS10\MvvmCross.iOS.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\Xamarin.iOS10\MvvmCross.Binding.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\Xamarin.iOS10\MvvmCross.Binding.iOS.dll - - - ..\..\..\packages\MvvmCross.Binding.5.6.3\lib\Xamarin.iOS10\MvvmCross.Localization.dll - - - ..\..\..\packages\Cirrious.FluentLayout.2.9.0\lib\Xamarin.iOS10\Cirrious.FluentLayouts.Touch.dll - @@ -125,7 +101,6 @@ - diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/packages.config b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/packages.config deleted file mode 100644 index aec2e2f5c..000000000 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.Sample/Simple.Android.Sample.csproj b/samples/ImageLoading.Sample/Simple.Android.Sample.csproj index be9865e69..3adfbc86d 100644 --- a/samples/ImageLoading.Sample/Simple.Android.Sample.csproj +++ b/samples/ImageLoading.Sample/Simple.Android.Sample.csproj @@ -43,109 +43,7 @@ - - ..\..\packages\Xamarin.Android.Arch.Core.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Common.dll - - - ..\..\packages\Xamarin.Android.Support.Annotations.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Annotations.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.Common.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Common.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.Runtime.dll - - - ..\..\packages\Xamarin.Android.Support.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Compat.dll - - - ..\..\packages\Xamarin.Android.Support.Core.UI.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.UI.dll - - - ..\..\packages\Xamarin.Android.Support.Core.Utils.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Core.Utils.dll - - - ..\..\packages\Xamarin.Android.Support.Fragment.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Fragment.dll - - - ..\..\packages\Xamarin.Android.Support.Media.Compat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Media.Compat.dll - - - ..\..\packages\Xamarin.Android.Support.v4.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v4.dll - - - ..\..\packages\Xamarin.Android.Support.v7.CardView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.CardView.dll - - - ..\..\packages\Xamarin.Android.Support.v7.RecyclerView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.RecyclerView.dll - - - ..\..\packages\Xamarin.Android.Support.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Vector.Drawable.dll - - - ..\..\packages\Xamarin.Android.Support.Animated.Vector.Drawable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Animated.Vector.Drawable.dll - - - ..\..\packages\Xamarin.Android.Support.v7.AppCompat.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.v7.AppCompat.dll - - - ..\..\packages\Xamarin.Android.Arch.Core.Runtime.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Core.Runtime.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.Core.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.Core.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.LiveData.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.LiveData.dll - - - ..\..\packages\Xamarin.Android.Arch.Lifecycle.ViewModel.1.1.1.1\lib\monoandroid90\Xamarin.Android.Arch.Lifecycle.ViewModel.dll - - - ..\..\packages\Xamarin.Android.Support.Collections.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Collections.dll - - - ..\..\packages\Xamarin.Android.Support.CursorAdapter.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CursorAdapter.dll - - - ..\..\packages\Xamarin.Android.Support.DocumentFile.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DocumentFile.dll - - - ..\..\packages\Xamarin.Android.Support.Interpolator.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Interpolator.dll - - - ..\..\packages\Xamarin.Android.Support.LocalBroadcastManager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.LocalBroadcastManager.dll - - - ..\..\packages\Xamarin.Android.Support.Print.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Print.dll - - - ..\..\packages\Xamarin.Android.Support.VersionedParcelable.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.VersionedParcelable.dll - - - ..\..\packages\Xamarin.Android.Support.AsyncLayoutInflater.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.AsyncLayoutInflater.dll - - - ..\..\packages\Xamarin.Android.Support.CustomView.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CustomView.dll - - - ..\..\packages\Xamarin.Android.Support.CoordinaterLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.CoordinaterLayout.dll - - - ..\..\packages\Xamarin.Android.Support.DrawerLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.DrawerLayout.dll - - - ..\..\packages\Xamarin.Android.Support.Loader.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.Loader.dll - - - ..\..\packages\Xamarin.Android.Support.SlidingPaneLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SlidingPaneLayout.dll - - - ..\..\packages\Xamarin.Android.Support.SwipeRefreshLayout.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.SwipeRefreshLayout.dll - - - ..\..\packages\Xamarin.Android.Support.ViewPager.28.0.0.1\lib\monoandroid90\Xamarin.Android.Support.ViewPager.dll - @@ -154,7 +52,6 @@ - @@ -168,7 +65,6 @@ AndroidResource - @@ -189,45 +85,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/ImageLoading.Sample/packages.config b/samples/ImageLoading.Sample/packages.config deleted file mode 100644 index 9553b45f5..000000000 --- a/samples/ImageLoading.Sample/packages.config +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj b/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj index dd10403fd..8c0422517 100644 --- a/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj +++ b/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj @@ -71,9 +71,6 @@ - - ..\..\packages\WebP.Touch.1.0.8\lib\Xamarin.iOS10\WebP.Touch.dll - @@ -112,7 +109,6 @@ - diff --git a/samples/Simple.iOS.Sample/packages.config b/samples/Simple.iOS.Sample/packages.config deleted file mode 100644 index 2fb8a33e6..000000000 --- a/samples/Simple.iOS.Sample/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file From 6ad2d60d4e5f3240d0228cebbfb395c0d511522c Mon Sep 17 00:00:00 2001 From: Martijn van Dijk Date: Tue, 24 Sep 2019 16:29:26 +0200 Subject: [PATCH 11/15] Fix sample project settings --- FFImageLoading.sln | 142 +++++++++++++++++- .../FFImageLoading.Forms.Sample.Droid.csproj | 14 ++ .../Droid/Properties/AndroidManifest.xml | 4 +- .../Shared/Properties/AssemblyInfo.cs | 27 ---- .../FFImageLoading.Forms.Sample.iOS.csproj | 7 +- .../Properties/AssemblyInfo.cs | 26 ---- ...ImageLoading.MvvmCross.Sample.Droid.csproj | 27 +++- .../Properties/AndroidManifest.xml | 6 +- ...FFImageLoading.MvvmCross.Sample.iOS.csproj | 14 +- .../Properties/AndroidManifest.xml | 2 +- .../Simple.Android.Sample.csproj | 19 +++ .../Simple.TizenForms.Sample.csproj | 1 - .../Simple.iOS.Sample.csproj | 6 +- 13 files changed, 214 insertions(+), 81 deletions(-) delete mode 100644 samples/ImageLoading.Forms.Sample/Shared/Properties/AssemblyInfo.cs delete mode 100644 samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/Properties/AssemblyInfo.cs diff --git a/FFImageLoading.sln b/FFImageLoading.sln index 6979336bc..55a92e3aa 100644 --- a/FFImageLoading.sln +++ b/FFImageLoading.sln @@ -59,7 +59,17 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionItems", "SolutionIt README.md = README.md EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFImageLoading", "FFImageLoading\FFImageLoading.csproj", "{1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading", "FFImageLoading\FFImageLoading.csproj", "{1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading.Forms", "FFImageLoading.Forms\FFImageLoading.Forms.csproj", "{31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading.MvvmCross", "FFImageLoading.MvvmCross\FFImageLoading.MvvmCross.csproj", "{E4083182-0C9F-49AC-BB91-238FCF9766AC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading.Svg", "FFImageLoading.Svg\FFImageLoading.Svg.csproj", "{F34D2449-A570-40CA-97E9-AE0653451C2C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading.Svg.Forms", "FFImageLoading.Svg.Forms\FFImageLoading.Svg.Forms.csproj", "{7308034E-C291-47B2-B34A-083B80C1F5E1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FFImageLoading.Transformations", "FFImageLoading.Transformations\FFImageLoading.Transformations.csproj", "{0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -78,6 +88,7 @@ Global EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|Any CPU.Build.0 = Debug|Any CPU {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|ARM.ActiveCfg = Debug|Any CPU {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|ARM.Build.0 = Debug|Any CPU @@ -93,7 +104,6 @@ Global {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x86.Build.0 = Debug|Any CPU {F898A684-E9C1-4154-9F80-6037287233F5}.Debug|x86.Deploy.0 = Debug|Any CPU {F898A684-E9C1-4154-9F80-6037287233F5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F898A684-E9C1-4154-9F80-6037287233F5}.Release|Any CPU.Deploy.0 = Release|Any CPU {F898A684-E9C1-4154-9F80-6037287233F5}.Release|ARM.ActiveCfg = Release|Any CPU {F898A684-E9C1-4154-9F80-6037287233F5}.Release|ARM.Build.0 = Release|Any CPU {F898A684-E9C1-4154-9F80-6037287233F5}.Release|ARM.Deploy.0 = Release|Any CPU @@ -178,6 +188,7 @@ Global {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x86.ActiveCfg = Release|Any CPU {3A682234-5918-4F58-B02B-598A59C6A7BD}.Release|x86.Build.0 = Release|Any CPU {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|Any CPU.ActiveCfg = Debug|x86 + {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|Any CPU.Build.0 = Debug|x86 {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|Any CPU.Deploy.0 = Debug|x86 {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|ARM.ActiveCfg = Debug|ARM {4B964916-47F4-4876-8A6B-9048B8A0D148}.Debug|ARM.Build.0 = Debug|ARM @@ -203,6 +214,7 @@ Global {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x86.Build.0 = Release|x86 {4B964916-47F4-4876-8A6B-9048B8A0D148}.Release|x86.Deploy.0 = Release|x86 {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator + {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|ARM.Build.0 = Debug|iPhoneSimulator {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Debug|iPhone.ActiveCfg = Debug|iPhone @@ -225,6 +237,7 @@ Global {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x86.ActiveCfg = Release|iPhone {B67D0516-5951-4DE9-B07F-AD3407D8CA90}.Release|x86.Build.0 = Release|iPhone {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|Any CPU.Build.0 = Debug|Any CPU {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|ARM.ActiveCfg = Debug|Any CPU {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|ARM.Build.0 = Debug|Any CPU {087DE224-30F0-4FEF-A960-F93F04182BA6}.Debug|iPhone.ActiveCfg = Debug|Any CPU @@ -247,6 +260,8 @@ Global {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x86.ActiveCfg = Release|Any CPU {087DE224-30F0-4FEF-A960-F93F04182BA6}.Release|x86.Build.0 = Release|Any CPU {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|ARM.ActiveCfg = Debug|Any CPU {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|ARM.Build.0 = Debug|Any CPU {A3760566-B91D-435F-94A6-31ADF4C7812F}.Debug|iPhone.ActiveCfg = Debug|Any CPU @@ -269,6 +284,7 @@ Global {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x86.ActiveCfg = Release|Any CPU {A3760566-B91D-435F-94A6-31ADF4C7812F}.Release|x86.Build.0 = Release|Any CPU {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|Any CPU.ActiveCfg = Debug|iPhoneSimulator + {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|Any CPU.Build.0 = Debug|iPhoneSimulator {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|ARM.ActiveCfg = Debug|iPhoneSimulator {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|ARM.Build.0 = Debug|iPhoneSimulator {8701A65C-0F63-4BE7-B3F7-D2365BB6366E}.Debug|iPhone.ActiveCfg = Debug|iPhone @@ -361,6 +377,7 @@ Global {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x86.ActiveCfg = Release|Any CPU {26980B5F-05B3-4070-A2A7-28749166E44C}.Release|x86.Build.0 = Release|Any CPU {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|Any CPU.Build.0 = Debug|Any CPU {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|ARM.ActiveCfg = Debug|Any CPU {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|ARM.Build.0 = Debug|Any CPU {01B928BA-5E3B-46C6-B172-624A60ECC534}.Debug|iPhone.ActiveCfg = Debug|Any CPU @@ -444,7 +461,6 @@ Global {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x86.ActiveCfg = Debug|Any CPU {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Debug|x86.Build.0 = Debug|Any CPU {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|Any CPU.Build.0 = Release|Any CPU {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|ARM.ActiveCfg = Release|Any CPU {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|ARM.Build.0 = Release|Any CPU {9DA44ABC-686C-4AE5-AB3F-19C01BAC279F}.Release|iPhone.ActiveCfg = Release|Any CPU @@ -479,6 +495,126 @@ Global {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|x64.Build.0 = Release|Any CPU {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|x86.ActiveCfg = Release|Any CPU {1C7FC7B7-C0A1-4E70-B9D4-F07E1DC61FDB}.Release|x86.Build.0 = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|Any CPU.Build.0 = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|ARM.ActiveCfg = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|ARM.Build.0 = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|iPhone.Build.0 = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|x64.ActiveCfg = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|x64.Build.0 = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|x86.ActiveCfg = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Debug|x86.Build.0 = Debug|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|Any CPU.ActiveCfg = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|Any CPU.Build.0 = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|ARM.ActiveCfg = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|ARM.Build.0 = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|iPhone.ActiveCfg = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|iPhone.Build.0 = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|x64.ActiveCfg = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|x64.Build.0 = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|x86.ActiveCfg = Release|Any CPU + {31606F36-CAF6-4F2B-B5D6-4AC6872BFD78}.Release|x86.Build.0 = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|ARM.ActiveCfg = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|ARM.Build.0 = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|iPhone.Build.0 = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|x64.ActiveCfg = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|x64.Build.0 = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|x86.ActiveCfg = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Debug|x86.Build.0 = Debug|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|Any CPU.Build.0 = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|ARM.ActiveCfg = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|ARM.Build.0 = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|iPhone.ActiveCfg = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|iPhone.Build.0 = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|x64.ActiveCfg = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|x64.Build.0 = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|x86.ActiveCfg = Release|Any CPU + {E4083182-0C9F-49AC-BB91-238FCF9766AC}.Release|x86.Build.0 = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|ARM.ActiveCfg = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|ARM.Build.0 = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|iPhone.Build.0 = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|x64.ActiveCfg = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|x64.Build.0 = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|x86.ActiveCfg = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Debug|x86.Build.0 = Debug|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|Any CPU.Build.0 = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|ARM.ActiveCfg = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|ARM.Build.0 = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|iPhone.ActiveCfg = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|iPhone.Build.0 = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|x64.ActiveCfg = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|x64.Build.0 = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|x86.ActiveCfg = Release|Any CPU + {F34D2449-A570-40CA-97E9-AE0653451C2C}.Release|x86.Build.0 = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|ARM.ActiveCfg = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|ARM.Build.0 = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|iPhone.Build.0 = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|x64.ActiveCfg = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|x64.Build.0 = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|x86.ActiveCfg = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Debug|x86.Build.0 = Debug|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|Any CPU.Build.0 = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|ARM.ActiveCfg = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|ARM.Build.0 = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|iPhone.ActiveCfg = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|iPhone.Build.0 = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|x64.ActiveCfg = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|x64.Build.0 = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|x86.ActiveCfg = Release|Any CPU + {7308034E-C291-47B2-B34A-083B80C1F5E1}.Release|x86.Build.0 = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|ARM.ActiveCfg = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|ARM.Build.0 = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|iPhone.Build.0 = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|x64.ActiveCfg = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|x64.Build.0 = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|x86.ActiveCfg = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Debug|x86.Build.0 = Debug|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|Any CPU.Build.0 = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|ARM.ActiveCfg = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|ARM.Build.0 = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|iPhone.ActiveCfg = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|iPhone.Build.0 = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|x64.ActiveCfg = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|x64.Build.0 = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|x86.ActiveCfg = Release|Any CPU + {0B539B18-5FE8-4FB5-9CFC-9BC6C024EC1C}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/samples/ImageLoading.Forms.Sample/Droid/FFImageLoading.Forms.Sample.Droid.csproj b/samples/ImageLoading.Forms.Sample/Droid/FFImageLoading.Forms.Sample.Droid.csproj index 34cbdd6bb..c92bca50b 100644 --- a/samples/ImageLoading.Forms.Sample/Droid/FFImageLoading.Forms.Sample.Droid.csproj +++ b/samples/ImageLoading.Forms.Sample/Droid/FFImageLoading.Forms.Sample.Droid.csproj @@ -34,6 +34,13 @@ Xamarin.Android.Net.AndroidClientHandler btls true + false + false + false + false + true + d8 + r8 full @@ -47,6 +54,13 @@ Xamarin.Android.Net.AndroidClientHandler btls true + false + false + false + false + true + d8 + r8 diff --git a/samples/ImageLoading.Forms.Sample/Droid/Properties/AndroidManifest.xml b/samples/ImageLoading.Forms.Sample/Droid/Properties/AndroidManifest.xml index 164d65108..7800fa862 100644 --- a/samples/ImageLoading.Forms.Sample/Droid/Properties/AndroidManifest.xml +++ b/samples/ImageLoading.Forms.Sample/Droid/Properties/AndroidManifest.xml @@ -1,6 +1,6 @@  - - + + \ No newline at end of file diff --git a/samples/ImageLoading.Forms.Sample/Shared/Properties/AssemblyInfo.cs b/samples/ImageLoading.Forms.Sample/Shared/Properties/AssemblyInfo.cs deleted file mode 100644 index 54a34c1e2..000000000 --- a/samples/ImageLoading.Forms.Sample/Shared/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following attributes. -// Change them to the values specific to your project. - -[assembly: AssemblyTitle("Shared")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("Daniel Luberda")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". -// The form "{Major}.{Minor}.*" will automatically update the build and revision, -// and "{Major}.{Minor}.{Build}.*" will update just the revision. - -[assembly: AssemblyVersion("1.0.0")] - -// The following attributes are used to specify the signing key for the assembly, -// if desired. See the Mono documentation for more information about signing. - -//[assembly: AssemblyDelaySign(false)] -//[assembly: AssemblyKeyFile("")] - diff --git a/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj b/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj index 7a027a972..2d2e46906 100644 --- a/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj +++ b/samples/ImageLoading.Forms.Sample/iOS/FFImageLoading.Forms.Sample.iOS.csproj @@ -26,6 +26,8 @@ true true NSUrlSessionHandler + true + true full @@ -47,7 +49,7 @@ 4 false i386 - None + SdkOnly iPhone Developer true NSUrlSessionHandler @@ -69,6 +71,9 @@ iPhone Developer NSUrlSessionHandler + + + diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/Properties/AssemblyInfo.cs b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/Properties/AssemblyInfo.cs deleted file mode 100644 index 16ceb5839..000000000 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Core/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following attributes. -// Change them to the values specific to your project. - -[assembly: AssemblyTitle("FFImageLoading.MvvmCross.Sample.Core")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("(c) Daniel Luberda")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". -// The form "{Major}.{Minor}.*" will automatically update the build and revision, -// and "{Major}.{Minor}.{Build}.*" will update just the revision. - -[assembly: AssemblyVersion("1.0.0")] - -// The following attributes are used to specify the signing key for the assembly, -// if desired. See the Mono documentation for more information about signing. - -//[assembly: AssemblyDelaySign(false)] -//[assembly: AssemblyKeyFile("")] diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/FFImageLoading.MvvmCross.Sample.Droid.csproj b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/FFImageLoading.MvvmCross.Sample.Droid.csproj index ff1d09dd1..036e26837 100644 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/FFImageLoading.MvvmCross.Sample.Droid.csproj +++ b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/FFImageLoading.MvvmCross.Sample.Droid.csproj @@ -26,9 +26,18 @@ 4 None arm64-v8a;armeabi;armeabi-v7a;x86 + false + false + false + false + true + d8 + r8 + true + 1G - true + false pdbonly true bin\Release @@ -36,6 +45,16 @@ 4 true false + false + false + false + false + true + d8 + r8 + true + 1G + true @@ -70,11 +89,5 @@ - - - {087DE224-30F0-4FEF-A960-F93F04182BA6} - FFImageLoading.MvvmCross.Sample.Core - - \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/Properties/AndroidManifest.xml b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/Properties/AndroidManifest.xml index 887b52661..80b2fd47b 100644 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/Properties/AndroidManifest.xml +++ b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.Droid/Properties/AndroidManifest.xml @@ -1,5 +1,5 @@  - - - + + + \ No newline at end of file diff --git a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj index 6db8791d2..f4ccf7ff0 100644 --- a/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj +++ b/samples/ImageLoading.MvvmCross.Sample/FFImageLoading.MvvmCross.Sample.iOS/FFImageLoading.MvvmCross.Sample.iOS.csproj @@ -26,7 +26,8 @@ 32830 None i386, x86_64 - HttpClientHandler + NSUrlSessionHandler + true pdbonly @@ -37,12 +38,13 @@ prompt 4 iPhone Developer - true - true + false + false Entitlements.plist SdkOnly ARMv7, ARM64 HttpClientHandler + true pdbonly @@ -118,11 +120,5 @@ - - - {087DE224-30F0-4FEF-A960-F93F04182BA6} - FFImageLoading.MvvmCross.Sample.Core - - \ No newline at end of file diff --git a/samples/ImageLoading.Sample/Properties/AndroidManifest.xml b/samples/ImageLoading.Sample/Properties/AndroidManifest.xml index 2c503bea9..baafca9db 100644 --- a/samples/ImageLoading.Sample/Properties/AndroidManifest.xml +++ b/samples/ImageLoading.Sample/Properties/AndroidManifest.xml @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/samples/ImageLoading.Sample/Simple.Android.Sample.csproj b/samples/ImageLoading.Sample/Simple.Android.Sample.csproj index 3adfbc86d..17b4e0c31 100644 --- a/samples/ImageLoading.Sample/Simple.Android.Sample.csproj +++ b/samples/ImageLoading.Sample/Simple.Android.Sample.csproj @@ -26,6 +26,16 @@ prompt 4 None + false + false + false + false + true + d8 + r8 + true + 1G + full @@ -35,6 +45,15 @@ prompt 4 False + false + false + false + false + true + d8 + r8 + true + 1G diff --git a/samples/Simple.TizenForms.Sample/Simple.TizenForms.Sample.csproj b/samples/Simple.TizenForms.Sample/Simple.TizenForms.Sample.csproj index 75f31f780..8f1a06681 100644 --- a/samples/Simple.TizenForms.Sample/Simple.TizenForms.Sample.csproj +++ b/samples/Simple.TizenForms.Sample/Simple.TizenForms.Sample.csproj @@ -10,6 +10,5 @@ Runtime - diff --git a/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj b/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj index 8c0422517..3cdee9ff4 100644 --- a/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj +++ b/samples/Simple.iOS.Sample/Simple.iOS.Sample.csproj @@ -24,6 +24,9 @@ true true iPhone Developer + true + true + true full @@ -34,8 +37,9 @@ false ARMv7, ARM64 Entitlements.plist - true + false iPhone Developer + true full From 054a589b3238984004ce9e1f5a69c59372d4fa3d Mon Sep 17 00:00:00 2001 From: Martijn van Dijk Date: Tue, 24 Sep 2019 16:51:56 +0200 Subject: [PATCH 12/15] Fix csproj files --- Directory.build.props | 1 + .../FFImageLoading.Forms.csproj | 25 ++++++----------- .../FFImageLoading.MvvmCross.csproj | 27 +++++-------------- .../FFImageLoading.Svg.Forms.csproj | 21 +++------------ FFImageLoading.Svg/FFImageLoading.Svg.csproj | 21 +++------------ .../FFImageLoading.Transformations.csproj | 21 +++------------ FFImageLoading/FFImageLoading.csproj | 8 ++---- .../Shared/FFImageLoading.Forms.Sample.csproj | 4 +-- .../FFImageLoading.Forms.Sample.WinUWP.csproj | 4 +-- .../FFImageLoading.Forms.Sample.Wpf.csproj | 4 +-- .../Simple.Universal.Sample.csproj | 2 +- .../FFImageLoading.Tests.csproj | 9 +++---- 12 files changed, 41 insertions(+), 106 deletions(-) diff --git a/Directory.build.props b/Directory.build.props index 091cbe983..5c32e9e62 100644 --- a/Directory.build.props +++ b/Directory.build.props @@ -21,6 +21,7 @@ $(NoWarn);1591;1701;1702;1705;VSX1000;NU1603 $(MSBuildProjectName.Contains('UnitTest')) + true diff --git a/FFImageLoading.Forms/FFImageLoading.Forms.csproj b/FFImageLoading.Forms/FFImageLoading.Forms.csproj index 89dbd1425..944faf6a9 100644 --- a/FFImageLoading.Forms/FFImageLoading.Forms.csproj +++ b/FFImageLoading.Forms/FFImageLoading.Forms.csproj @@ -1,7 +1,7 @@  - netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40;uap10.0.16299;net472 - netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;xamarin.watchos10;monoandroid90;tizen40;uap10.0.16299;net472 + uap10.0.16299;$(TargetFrameworks) @@ -22,7 +22,7 @@ true - + @@ -41,15 +41,6 @@ - - - - - - - - - @@ -104,19 +95,19 @@ - - - - + + + + + \ No newline at end of file diff --git a/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj b/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj index 18495b0b0..f24a4dfe5 100644 --- a/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj +++ b/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj @@ -1,7 +1,7 @@  - netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40;uap10.0.16299;net472 - netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;xamarin.watchos10;monoandroid90;tizen40;uap10.0.16299;net472 + uap10.0.16299;$(TargetFrameworks) @@ -12,9 +12,9 @@ - FFImageLoading.Svg - FFImageLoading.Svg - Xamarin.FFImageLoading.Svg + FFImageLoading.MvvmCross + FFImageLoading.MvvmCross + Xamarin.FFImageLoading.MvvmCross Xamarin library to load images quickly and easily on Xamarin.iOS / Xamarin.Android / Xamarin.Mac / Windows true @@ -22,7 +22,7 @@ true - + @@ -41,15 +41,6 @@ - - - - - - - - - @@ -104,15 +95,11 @@ - - - - + diff --git a/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj b/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj index 63b7e5863..18c864085 100644 --- a/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj +++ b/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj @@ -1,7 +1,7 @@  - netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40;uap10.0.16299;net472 - netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;xamarin.watchos10;monoandroid90;tizen40;uap10.0.16299;net472 + uap10.0.16299;$(TargetFrameworks) @@ -22,7 +22,7 @@ true - + @@ -41,15 +41,6 @@ - - - - - - - - - @@ -104,15 +95,11 @@ - - - - + diff --git a/FFImageLoading.Svg/FFImageLoading.Svg.csproj b/FFImageLoading.Svg/FFImageLoading.Svg.csproj index 18495b0b0..9d2853880 100644 --- a/FFImageLoading.Svg/FFImageLoading.Svg.csproj +++ b/FFImageLoading.Svg/FFImageLoading.Svg.csproj @@ -1,7 +1,7 @@  - netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40;uap10.0.16299;net472 - netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;xamarin.watchos10;monoandroid90;tizen40;uap10.0.16299;net472 + uap10.0.16299;$(TargetFrameworks) @@ -22,7 +22,7 @@ true - + @@ -41,15 +41,6 @@ - - - - - - - - - @@ -104,15 +95,11 @@ - - - - + diff --git a/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj b/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj index e04806af7..822dc17a3 100644 --- a/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj +++ b/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj @@ -1,7 +1,7 @@  - netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40;uap10.0.16299;net472 - netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;xamarin.watchos10;monoandroid90;tizen40;uap10.0.16299;net472 + uap10.0.16299;$(TargetFrameworks) @@ -22,7 +22,7 @@ true - + @@ -41,15 +41,6 @@ - - - - - - - - - @@ -104,15 +95,11 @@ - - - - + diff --git a/FFImageLoading/FFImageLoading.csproj b/FFImageLoading/FFImageLoading.csproj index 9bfa9bc7e..b7b60e794 100644 --- a/FFImageLoading/FFImageLoading.csproj +++ b/FFImageLoading/FFImageLoading.csproj @@ -1,7 +1,7 @@  - netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40;uap10.0.16299;net472 - netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;monoandroid90;tizen40 + netstandard2.0;xamarin.ios10;xamarin.mac20;xamarin.tvos10;xamarin.watchos10;monoandroid90;tizen40;uap10.0.16299;net472 + uap10.0.16299;$(TargetFrameworks) @@ -41,10 +41,6 @@ - - - - diff --git a/samples/ImageLoading.Forms.Sample/Shared/FFImageLoading.Forms.Sample.csproj b/samples/ImageLoading.Forms.Sample/Shared/FFImageLoading.Forms.Sample.csproj index 4929fd31e..c0d21de71 100644 --- a/samples/ImageLoading.Forms.Sample/Shared/FFImageLoading.Forms.Sample.csproj +++ b/samples/ImageLoading.Forms.Sample/Shared/FFImageLoading.Forms.Sample.csproj @@ -12,9 +12,9 @@ - + - + diff --git a/samples/ImageLoading.Forms.Sample/WinUWP/FFImageLoading.Forms.Sample.WinUWP.csproj b/samples/ImageLoading.Forms.Sample/WinUWP/FFImageLoading.Forms.Sample.WinUWP.csproj index 5e98bc1e7..3fa0e10c9 100644 --- a/samples/ImageLoading.Forms.Sample/WinUWP/FFImageLoading.Forms.Sample.WinUWP.csproj +++ b/samples/ImageLoading.Forms.Sample/WinUWP/FFImageLoading.Forms.Sample.WinUWP.csproj @@ -131,13 +131,13 @@ - 6.1.5 + 6.2.9 1.68.0 - 3.6.0.344457 + 4.0.0.709238 1.0.5 diff --git a/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj b/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj index 4630d6bcb..2db7048eb 100644 --- a/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj +++ b/samples/ImageLoading.Forms.Sample/Wpf/FFImageLoading.Forms.Sample.Wpf.csproj @@ -96,10 +96,10 @@ - 3.6.0.22065 + 4.0.0.709238 - 3.6.0.22065 + 4.0.0.709238 diff --git a/samples/Simple.WinUniversal.Sample/Simple.Universal.Sample.csproj b/samples/Simple.WinUniversal.Sample/Simple.Universal.Sample.csproj index ce65c4d73..4096ee27a 100644 --- a/samples/Simple.WinUniversal.Sample/Simple.Universal.Sample.csproj +++ b/samples/Simple.WinUniversal.Sample/Simple.Universal.Sample.csproj @@ -128,7 +128,7 @@ - 6.1.5 + 6.2.9 diff --git a/source/Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj b/source/Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj index 3a3c5d661..96102fb68 100644 --- a/source/Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj +++ b/source/Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj @@ -1,9 +1,8 @@ - + - netcoreapp2.0 + netcoreapp3.0 false - 2.0.3 @@ -12,8 +11,8 @@ - - + + From 0fe3cf96121f9bb445346bf376cfc854ede53fcf Mon Sep 17 00:00:00 2001 From: Martijn van Dijk Date: Tue, 24 Sep 2019 16:55:29 +0200 Subject: [PATCH 13/15] Fix references --- FFImageLoading.Forms/FFImageLoading.Forms.csproj | 4 ++++ FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj | 4 ++++ FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj | 6 ++++++ FFImageLoading.Svg/FFImageLoading.Svg.csproj | 4 ++++ .../FFImageLoading.Transformations.csproj | 4 ++++ .../Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj | 4 ++++ 6 files changed, 26 insertions(+) diff --git a/FFImageLoading.Forms/FFImageLoading.Forms.csproj b/FFImageLoading.Forms/FFImageLoading.Forms.csproj index 944faf6a9..0b012776e 100644 --- a/FFImageLoading.Forms/FFImageLoading.Forms.csproj +++ b/FFImageLoading.Forms/FFImageLoading.Forms.csproj @@ -109,5 +109,9 @@ + + + + \ No newline at end of file diff --git a/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj b/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj index f24a4dfe5..0fe1dab68 100644 --- a/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj +++ b/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj @@ -105,5 +105,9 @@ + + + + \ No newline at end of file diff --git a/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj b/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj index 18c864085..686d41321 100644 --- a/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj +++ b/FFImageLoading.Svg.Forms/FFImageLoading.Svg.Forms.csproj @@ -105,5 +105,11 @@ + + + + + + \ No newline at end of file diff --git a/FFImageLoading.Svg/FFImageLoading.Svg.csproj b/FFImageLoading.Svg/FFImageLoading.Svg.csproj index 9d2853880..fca275b3c 100644 --- a/FFImageLoading.Svg/FFImageLoading.Svg.csproj +++ b/FFImageLoading.Svg/FFImageLoading.Svg.csproj @@ -105,5 +105,9 @@ + + + + \ No newline at end of file diff --git a/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj b/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj index 822dc17a3..b070284e4 100644 --- a/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj +++ b/FFImageLoading.Transformations/FFImageLoading.Transformations.csproj @@ -105,5 +105,9 @@ + + + + \ No newline at end of file diff --git a/source/Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj b/source/Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj index 96102fb68..aaac32136 100644 --- a/source/Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj +++ b/source/Tests/FFImageLoading.Tests/FFImageLoading.Tests.csproj @@ -20,4 +20,8 @@ + + + + From e8d7128deb2dec77a08e4534eecb8a0f3af0479d Mon Sep 17 00:00:00 2001 From: Martijn van Dijk Date: Tue, 24 Sep 2019 17:08:23 +0200 Subject: [PATCH 14/15] Move mvvmcross --- .../FFImageLoading.MvvmCross.csproj | 5 +++++ .../MvxCachedImageView.cs | 0 .../MvxSvgCachedImageView.cs | 0 .../FFImageLoading.Cross.Svg.projitems | 14 -------------- .../FFImageLoading.Cross.Svg.shproj | 11 ----------- .../FFImageLoading.Cross.projitems | 14 -------------- .../FFImageLoading.Cross.shproj | 11 ----------- 7 files changed, 5 insertions(+), 50 deletions(-) rename {source/FFImageLoading.Cross => FFImageLoading.MvvmCross}/MvxCachedImageView.cs (100%) rename {source/FFImageLoading.Cross.Svg => FFImageLoading.MvvmCross}/MvxSvgCachedImageView.cs (100%) delete mode 100644 source/FFImageLoading.Cross.Svg/FFImageLoading.Cross.Svg.projitems delete mode 100644 source/FFImageLoading.Cross.Svg/FFImageLoading.Cross.Svg.shproj delete mode 100644 source/FFImageLoading.Cross/FFImageLoading.Cross.projitems delete mode 100644 source/FFImageLoading.Cross/FFImageLoading.Cross.shproj diff --git a/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj b/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj index 0fe1dab68..c7b2afb9e 100644 --- a/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj +++ b/FFImageLoading.MvvmCross/FFImageLoading.MvvmCross.csproj @@ -106,8 +106,13 @@ + + + + + \ No newline at end of file diff --git a/source/FFImageLoading.Cross/MvxCachedImageView.cs b/FFImageLoading.MvvmCross/MvxCachedImageView.cs similarity index 100% rename from source/FFImageLoading.Cross/MvxCachedImageView.cs rename to FFImageLoading.MvvmCross/MvxCachedImageView.cs diff --git a/source/FFImageLoading.Cross.Svg/MvxSvgCachedImageView.cs b/FFImageLoading.MvvmCross/MvxSvgCachedImageView.cs similarity index 100% rename from source/FFImageLoading.Cross.Svg/MvxSvgCachedImageView.cs rename to FFImageLoading.MvvmCross/MvxSvgCachedImageView.cs diff --git a/source/FFImageLoading.Cross.Svg/FFImageLoading.Cross.Svg.projitems b/source/FFImageLoading.Cross.Svg/FFImageLoading.Cross.Svg.projitems deleted file mode 100644 index 90129e828..000000000 --- a/source/FFImageLoading.Cross.Svg/FFImageLoading.Cross.Svg.projitems +++ /dev/null @@ -1,14 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - {60678181-1544-4276-9B2A-6239C1046EA5} - - - FFImageLoading.Cross.Svg - - - - - \ No newline at end of file diff --git a/source/FFImageLoading.Cross.Svg/FFImageLoading.Cross.Svg.shproj b/source/FFImageLoading.Cross.Svg/FFImageLoading.Cross.Svg.shproj deleted file mode 100644 index 5628d04c8..000000000 --- a/source/FFImageLoading.Cross.Svg/FFImageLoading.Cross.Svg.shproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - {60678181-1544-4276-9B2A-6239C1046EA5} - - - - - - - \ No newline at end of file diff --git a/source/FFImageLoading.Cross/FFImageLoading.Cross.projitems b/source/FFImageLoading.Cross/FFImageLoading.Cross.projitems deleted file mode 100644 index 30092adcf..000000000 --- a/source/FFImageLoading.Cross/FFImageLoading.Cross.projitems +++ /dev/null @@ -1,14 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - {3C58B37D-EDB7-4778-AA48-F3AD9A571059} - - - FFImageLoading.Cross - - - - - \ No newline at end of file diff --git a/source/FFImageLoading.Cross/FFImageLoading.Cross.shproj b/source/FFImageLoading.Cross/FFImageLoading.Cross.shproj deleted file mode 100644 index 27c8ffd96..000000000 --- a/source/FFImageLoading.Cross/FFImageLoading.Cross.shproj +++ /dev/null @@ -1,11 +0,0 @@ - - - - {3C58B37D-EDB7-4778-AA48-F3AD9A571059} - - - - - - - \ No newline at end of file From a58ec6473d0cf4b59913518f1f90c098765e1e5b Mon Sep 17 00:00:00 2001 From: Martijn van Dijk Date: Tue, 24 Sep 2019 17:18:00 +0200 Subject: [PATCH 15/15] Add skiasharp dependency --- FFImageLoading.Svg/FFImageLoading.Svg.csproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/FFImageLoading.Svg/FFImageLoading.Svg.csproj b/FFImageLoading.Svg/FFImageLoading.Svg.csproj index fca275b3c..45245aaf2 100644 --- a/FFImageLoading.Svg/FFImageLoading.Svg.csproj +++ b/FFImageLoading.Svg/FFImageLoading.Svg.csproj @@ -106,6 +106,10 @@ + + + +