Commit df607020 authored by Mikael Lindemann's avatar Mikael Lindemann
Browse files

SDK style project + build zip-package as part of release build.

parent bbe09874
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{13039FC7-1946-45AB-9C10-25662BFB7C70}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<RootNamespace>Appstract.UmbracoContactNumber</RootNamespace>
<AssemblyName>Appstract.UmbracoContactNumber</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<TargetFramework>net472</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<NuspecFile>Appstract.UmbracoContactNumber.nuspec</NuspecFile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="LightInject, Version=5.4.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\LightInject.5.4.0\lib\net46\LightInject.dll</HintPath>
</Reference>
<Reference Include="LightInject.Annotation, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\LightInject.Annotation.1.1.0\lib\net46\LightInject.Annotation.dll</HintPath>
</Reference>
<Reference Include="LightInject.Web, Version=2.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\LightInject.Web.2.0.0\lib\net46\LightInject.Web.dll</HintPath>
</Reference>
<Reference Include="Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.Identity.Core.2.2.2\lib\net45\Microsoft.AspNet.Identity.Core.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.0.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Owin, Version=4.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Owin.4.0.1\lib\net45\Microsoft.Owin.dll</HintPath>
</Reference>
<Reference Include="MiniProfiler, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3, processorArchitecture=MSIL">
<HintPath>..\packages\MiniProfiler.4.0.138\lib\net461\MiniProfiler.dll</HintPath>
</Reference>
<Reference Include="MiniProfiler.Shared, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3, processorArchitecture=MSIL">
<HintPath>..\packages\MiniProfiler.Shared.4.0.138\lib\net461\MiniProfiler.Shared.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="NPoco, Version=3.9.4.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\NPoco.3.9.4\lib\net45\NPoco.dll</HintPath>
</Reference>
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
<HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
</Reference>
<Reference Include="Semver, Version=2.0.4.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Semver.2.0.4\lib\net452\Semver.dll</HintPath>
</Reference>
<Reference Include="Serilog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.2.8.0\lib\net46\Serilog.dll</HintPath>
</Reference>
<Reference Include="Serilog.Enrichers.Process, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.Enrichers.Process.2.0.1\lib\net45\Serilog.Enrichers.Process.dll</HintPath>
</Reference>
<Reference Include="Serilog.Enrichers.Thread, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.Enrichers.Thread.3.0.0\lib\net45\Serilog.Enrichers.Thread.dll</HintPath>
</Reference>
<Reference Include="Serilog.Filters.Expressions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.Filters.Expressions.2.0.0\lib\net45\Serilog.Filters.Expressions.dll</HintPath>
</Reference>
<Reference Include="Serilog.Formatting.Compact, Version=1.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.Formatting.Compact.1.0.0\lib\net45\Serilog.Formatting.Compact.dll</HintPath>
</Reference>
<Reference Include="Serilog.Formatting.Compact.Reader, Version=1.0.3.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.Formatting.Compact.Reader.1.0.3\lib\net45\Serilog.Formatting.Compact.Reader.dll</HintPath>
</Reference>
<Reference Include="Serilog.Settings.AppSettings, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.Settings.AppSettings.2.2.2\lib\net45\Serilog.Settings.AppSettings.dll</HintPath>
</Reference>
<Reference Include="Serilog.Sinks.Async, Version=1.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.Sinks.Async.1.3.0\lib\net45\Serilog.Sinks.Async.dll</HintPath>
</Reference>
<Reference Include="Serilog.Sinks.File, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.Sinks.File.4.0.0\lib\net45\Serilog.Sinks.File.dll</HintPath>
</Reference>
<Reference Include="Serilog.Sinks.Map, Version=1.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\packages\Serilog.Sinks.Map.1.0.0\lib\netstandard2.0\Serilog.Sinks.Map.dll</HintPath>
</Reference>
<Reference Include="Superpower, Version=1.0.0.0, Culture=neutral, PublicKeyToken=aec39280ded1b3a7, processorArchitecture=MSIL">
<HintPath>..\packages\Superpower.2.0.0\lib\net45\Superpower.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Data.Linq" />
<Reference Include="System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\Umbraco.SqlServerCE.4.0.0.1\lib\net472\System.Data.SqlServerCe.dll</HintPath>
</Reference>
<Reference Include="System.Data.SqlServerCe.Entity, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\Umbraco.SqlServerCE.4.0.0.1\lib\net472\System.Data.SqlServerCe.Entity.dll</HintPath>
</Reference>
<Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.2.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.4.4.1\lib\net46\System.Diagnostics.DiagnosticSource.dll</HintPath>
</Reference>
<Reference Include="System.IO" />
<Reference Include="System.Linq.Expressions" />
<Reference Include="System.Net.Http.Formatting, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.7\lib\net45\System.Net.Http.Formatting.dll</HintPath>
</Reference>
<Reference Include="System.Runtime" />
<Reference Include="System.Runtime.Caching" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Threading.Tasks" />
<Reference Include="System.Transactions" />
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
<Reference Include="Umbraco.Core, Version=8.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.8.4.0\lib\net472\Umbraco.Core.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="ContactNumberValueConverter.cs" />
<Compile Include="ContactNumber.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App_Plugins\Appstract.UmbracoContactNumber\package.manifest" />
<None Include="packages.config" />
<None Include="Appstract.UmbracoContactNumber.nuspec" />
</ItemGroup>
<ItemGroup>
......@@ -158,14 +17,43 @@
<Content Include="App_Plugins\Appstract.UmbracoContactNumber\lang\en-US.xml" />
<Content Include="App_Plugins\Appstract.UmbracoContactNumber\style.css" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\packages\NuGet.Build.Tasks.Pack.5.4.0\build\NuGet.Build.Tasks.Pack.targets" Condition="Exists('..\packages\NuGet.Build.Tasks.Pack.5.4.0\build\NuGet.Build.Tasks.Pack.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\NuGet.Build.Tasks.Pack.5.4.0\build\NuGet.Build.Tasks.Pack.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NuGet.Build.Tasks.Pack.5.4.0\build\NuGet.Build.Tasks.Pack.targets'))" />
<Error Condition="!Exists('..\packages\Umbraco.SqlServerCE.4.0.0.1\build\Umbraco.SqlServerCE.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Umbraco.SqlServerCE.4.0.0.1\build\Umbraco.SqlServerCE.targets'))" />
</Target>
<Import Project="..\packages\Umbraco.SqlServerCE.4.0.0.1\build\Umbraco.SqlServerCE.targets" Condition="Exists('..\packages\Umbraco.SqlServerCE.4.0.0.1\build\Umbraco.SqlServerCE.targets')" />
<ItemGroup>
<PackageReference Include="NuGet.Build.Tasks.Pack" Version="5.4.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="UmbracoCms.Core" Version="8.4.0" />
</ItemGroup>
<ItemGroup>
<PackageSourceFiles Include="App_Plugins\Appstract.UmbracoContactNumber\*;App_Plugins\Appstract.UmbracoContactNumber\lang\*;bin\Release\net472\Appstract.UmbracoContactNumber.dll;package.xml" />
</ItemGroup>
<PropertyGroup>
<PackageIntermediateDirectory>$(BaseIntermediateOutputPath)\package_output\</PackageIntermediateDirectory>
<Namespace>
<Namespace Prefix="nuspec" Uri="http://schemas.microsoft.com/packaging/2011/10/nuspec.xsd" />
</Namespace>
</PropertyGroup>
<Target Name="UmbracoPackage" AfterTargets="AfterBuild" Condition=" '$(Configuration)' == 'Release' ">
<MakeDir Directories="$(PackageIntermediateDirectory)" />
<Delete Files="$(PackageIntermediateDirectory)\*" />
<Copy SourceFiles="@(PackageSourceFiles)" DestinationFolder="$(PackageIntermediateDirectory)" />
<XmlPeek XmlInputPath="$(NuspecFile)" Query="/nuspec:package/nuspec:metadata/nuspec:version/text()" Namespaces="$(Namespace)">
<Output TaskParameter="Result" ItemName="version" />
</XmlPeek>
<PropertyGroup>
<NuspecVersion>@(version)</NuspecVersion>
</PropertyGroup>
<XmlPoke XmlInputPath="$(PackageIntermediateDirectory)\package.xml" Value="$(NuspecVersion)" Query="/umbPackage/info/package/version" />
<ZipDirectory SourceDirectory="$(PackageIntermediateDirectory)" DestinationFile="$(BaseOutputPath)$(Configuration)\$(AssemblyName).$(NuspecVersion).zip" Overwrite="true" />
</Target>
<Target Name="UmbracoPackageClean" AfterTargets="Clean">
<Delete Files="$(PackageIntermediateDirectory)\*" />
<RemoveDir Directories="$(PackageIntermediateDirectory)" />
</Target>
</Project>
\ No newline at end of file
......@@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2011/10/nuspec.xsd">
<metadata>
<id>Appstract.UmbracoContactNumber</id>
<version>1.0.0</version>
<version>1.0.0-pre-11</version>
<authors>Appstract Consulting Aps</authors>
<owners>Appstract Consulting Aps</owners>
<projectUrl>https://gitlab.dev.appstract.dk/internal/umbracocontactnumber</projectUrl>
......@@ -21,7 +21,7 @@
</dependencies>
</metadata>
<files>
<file src="bin\Release\Appstract.UmbracoContactNumber.dll" target="lib\net472" />
<file src="bin\Release\net472\Appstract.UmbracoContactNumber.dll" target="lib\net472" />
<file src="App_Plugins\Appstract.UmbracoContactNumber\**\*.*" target="content\App_Plugins\Appstract.UmbracoContactNumber" />
</files>
</package>
\ No newline at end of file
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("Appstract.UmbracoContactNumber")]
[assembly: AssemblyDescription("This adds a contact (phone) number custom property editor that allows to select a country code from a list of countries and shows a green checkbox if the number is known to be of correct length for the country.")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Appstract Consulting Aps")]
[assembly: AssemblyProduct("Appstract.UmbracoContactNumber")]
[assembly: AssemblyCopyright("Copyright © Appstract Consulting Aps 2020")]
[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("13039fc7-1946-45ab-9c10-25662bfb7c70")]
// 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")]
<?xml version="1.0" encoding="utf-8"?>
<umbPackage>
<files>
<file>
<guid>index.html</guid>
<orgPath>~/App_Plugins/Appstract.UmbracoContactNumber</orgPath>
<orgName>index.html</orgName>
</file>
<file>
<guid>index.js</guid>
<orgPath>~/App_Plugins/Appstract.UmbracoContactNumber</orgPath>
<orgName>index.js</orgName>
</file>
<file>
<guid>input_check.svg</guid>
<orgPath>~/App_Plugins/Appstract.UmbracoContactNumber</orgPath>
<orgName>input_check.svg</orgName>
</file>
<file>
<guid>package.manifest</guid>
<orgPath>~/App_Plugins/Appstract.UmbracoContactNumber</orgPath>
<orgName>package.manifest</orgName>
</file>
<file>
<guid>style.css</guid>
<orgPath>~/App_Plugins/Appstract.UmbracoContactNumber</orgPath>
<orgName>style.css</orgName>
</file>
<file>
<guid>en-US.xml</guid>
<orgPath>~/App_Plugins/Appstract.UmbracoContactNumber/lang</orgPath>
<orgName>en-US.xml</orgName>
</file>
<file>
<guid>Appstract.UmbracoContactNumber.dll</guid>
<orgPath>~/bin</orgPath>
<orgName>Appstract.UmbracoContactNumber.dll</orgName>
</file>
</files>
<info>
<package>
<name>Appstract.UmbracoContactNumber</name>
<version>1.0.0</version>
<iconUrl>
</iconUrl>
<license url="http://opensource.org/licenses/MIT">MIT License</license>
<url>https://gitlab.dev.appstract.dk/internal/umbracocontactnumber</url>
<requirements type="Strict">
<major>8</major>
<minor>1</minor>
<patch>2</patch>
</requirements>
</package>
<author>
<name>Appstract Consulting Aps</name>
<website>https://appstract.dk</website>
</author>
<contributors>
<contributor>
</contributor>
</contributors>
<readme><![CDATA[]]></readme>
</info>
<DocumentTypes />
<Templates />
<Stylesheets />
<Macros />
<DictionaryItems />
<Languages />
<DataTypes>
<DataType Name="Contact phone number" Id="AppstractUmbracoContactNumber" Definition="7c4698c9-4f28-40a1-b4f2-c2bf94c1d339" DatabaseType="Ntext" Configuration="{}" />
</DataTypes>
<Actions />
</umbPackage>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="LightInject" version="5.4.0" targetFramework="net472" />
<package id="LightInject.Annotation" version="1.1.0" targetFramework="net472" />
<package id="LightInject.Web" version="2.0.0" targetFramework="net472" />
<package id="Microsoft.AspNet.Identity.Core" version="2.2.2" targetFramework="net472" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.7" targetFramework="net472" />
<package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="2.0.0" targetFramework="net472" />
<package id="Microsoft.Owin" version="4.0.1" targetFramework="net472" />
<package id="MiniProfiler" version="4.0.138" targetFramework="net472" />
<package id="MiniProfiler.Shared" version="4.0.138" targetFramework="net472" />
<package id="Newtonsoft.Json" version="12.0.1" targetFramework="net472" />
<package id="NPoco" version="3.9.4" targetFramework="net472" />
<package id="NuGet.Build.Tasks.Pack" version="5.4.0" targetFramework="net472" developmentDependency="true" />
<package id="Owin" version="1.0" targetFramework="net472" />
<package id="Semver" version="2.0.4" targetFramework="net472" />
<package id="Serilog" version="2.8.0" targetFramework="net472" />
<package id="Serilog.Enrichers.Process" version="2.0.1" targetFramework="net472" />
<package id="Serilog.Enrichers.Thread" version="3.0.0" targetFramework="net472" />
<package id="Serilog.Filters.Expressions" version="2.0.0" targetFramework="net472" />
<package id="Serilog.Formatting.Compact" version="1.0.0" targetFramework="net472" />
<package id="Serilog.Formatting.Compact.Reader" version="1.0.3" targetFramework="net472" />
<package id="Serilog.Settings.AppSettings" version="2.2.2" targetFramework="net472" />
<package id="Serilog.Sinks.Async" version="1.3.0" targetFramework="net472" />
<package id="Serilog.Sinks.File" version="4.0.0" targetFramework="net472" />
<package id="Serilog.Sinks.Map" version="1.0.0" targetFramework="net472" />
<package id="Superpower" version="2.0.0" targetFramework="net472" />
<package id="System.Diagnostics.DiagnosticSource" version="4.4.1" targetFramework="net472" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
<package id="Umbraco.SqlServerCE" version="4.0.0.1" targetFramework="net472" />
<package id="UmbracoCms.Core" version="8.4.0" targetFramework="net472" />
</packages>
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment