mirror of
https://bitbucket.org/mfeemster/fractorium.git
synced 2025-06-30 21:36:33 -04:00
--Bug fixes
-Fix possible OpenCL bugs in cubic3D, cubicLattice3D, dc_cube, falloff, falloff2, falloff3, waffle. --Code changes -Upgrade to Visual Studio 2019.
This commit is contained in:
@ -37,7 +37,7 @@ static void sincos(float x, float* s, float* c)
|
||||
|
||||
namespace EmberNs
|
||||
{
|
||||
#define EMBER_VERSION "1.0.0.19"
|
||||
#define EMBER_VERSION "1.0.0.20"
|
||||
//#define FLAM3_COMPAT 1//Uncomment this if you want full compatibility with flam3 regarding some of the trig-based variations in Variations01.h
|
||||
#define EPS6 T(1e-6)
|
||||
#define EPS std::numeric_limits<T>::epsilon()//Apoplugin.h uses -20, but it's more mathematically correct to do it this way.
|
||||
|
@ -1778,6 +1778,7 @@ public:
|
||||
<< "\t\t r = fma(MwcNext01(mwc), 1 - " << yThickness << ", MwcNextRange(mwc, (int)" << slices << ") + " << yThickness << ") / " << slices << ";\n"
|
||||
<< "\t\t break;\n"
|
||||
<< "\t\t case 4:\n"
|
||||
<< "\t\t default:\n"
|
||||
<< "\t\t a = fma(MwcNext01(mwc), (1 - " << xThickness << "), MwcNextRange(mwc, (int)" << slices << ") + " << xThickness << ") / " << slices << ";\n"
|
||||
<< "\t\t r = MwcNext01(mwc);\n"
|
||||
<< "\t\t break;\n"
|
||||
|
@ -773,7 +773,7 @@ public:
|
||||
"\t\t vOut.z = val3 - " << halfweight << ";\n"
|
||||
"\t\t break;\n"
|
||||
"\t\t case 7:\n"
|
||||
"\t\t default:\n"
|
||||
"\t\t default:\n"
|
||||
"\t\t vOut.x = val1 - " << halfweight << ";\n"
|
||||
"\t\t vOut.y = val2 - " << halfweight << ";\n"
|
||||
"\t\t vOut.z = val3 - " << halfweight << ";\n"
|
||||
@ -1024,7 +1024,7 @@ public:
|
||||
<< "\t\t vOut.z = pztz - " << weight << ";\n"
|
||||
<< "\t\t break;\n"
|
||||
<< "\t\t case 7:\n"
|
||||
<< "\t\t default:\n"
|
||||
<< "\t\t default:\n"
|
||||
<< "\t\t vOut.x = pxtx - " << weight << ";\n"
|
||||
<< "\t\t vOut.y = pyty - " << weight << ";\n"
|
||||
<< "\t\t vOut.z = pztz - " << weight << ";\n"
|
||||
@ -2550,6 +2550,7 @@ public:
|
||||
<< "\t\t vOut.z = rad * sigmas;\n"
|
||||
<< "\t\t break;\n"
|
||||
<< "\t\t case 2:\n"
|
||||
<< "\t\t default:\n"
|
||||
<< "\t\t scale = clamp(rs, (real_t)(0.0), (real_t)(0.9)) + (real_t)(0.1);\n"
|
||||
<< "\t\t denom = 1 / scale;\n"
|
||||
<< "\t\t vOut.x = fma(" << weight << ", Lerp(vIn.x, fma(scale, ax, floor(vIn.x * denom)), " << mulX << " * rs), " << mulX << " * pow(ax, " << boxPow << ") * rs * denom);\n"
|
||||
@ -2746,6 +2747,7 @@ public:
|
||||
<< "\t\t }\n"
|
||||
<< "\t\t break;\n"
|
||||
<< "\t\t case 2:\n"
|
||||
<< "\t\t default:\n"
|
||||
<< "\t\t {\n"
|
||||
<< "\t\t real_t sigma = dist * randy * M_2PI;\n"
|
||||
<< "\t\t real_t phi = dist * randz * MPI;\n"
|
||||
@ -2975,6 +2977,7 @@ public:
|
||||
<< "\t\t }\n"
|
||||
<< "\t\t break;\n"
|
||||
<< "\t\tcase 2:\n"
|
||||
<< "\t\tdefault:\n"
|
||||
<< "\t\t {\n"
|
||||
<< "\t\t real_t coeff = " << rMax << " <= EPS ? dist : fma(" << alpha << ", (LogMap(dist) - dist), dist);\n"
|
||||
<< "\n"
|
||||
|
@ -310,6 +310,7 @@ public:
|
||||
<< "\n"
|
||||
<< "\t\t break;\n"
|
||||
<< "\t\t case 2:\n"
|
||||
<< "\t\t default:\n"
|
||||
<< "\t\t x = " << weight << " * p;\n"
|
||||
<< "\t\t y = " << weight << " * q;\n"
|
||||
<< "\t\t z = " << weight << " * (j ? -1 : 1);\n"
|
||||
|
@ -1588,7 +1588,8 @@ void TestArbitrary()
|
||||
vector<string> stringVec, withoutVec;
|
||||
auto varList = VariationList<float>::Instance();
|
||||
auto& vars = varList->AllVars();
|
||||
stringVec.push_back("if (!");
|
||||
stringVec.push_back("switch");
|
||||
//stringVec.push_back("if (!");
|
||||
withoutVec.push_back("=");
|
||||
withoutVec.push_back("<");
|
||||
withoutVec.push_back(">");
|
||||
@ -1599,8 +1600,8 @@ void TestArbitrary()
|
||||
//stringVec.push_back("sin(");
|
||||
//stringVec.push_back("cos(");
|
||||
//stringVec.push_back("sincos(");
|
||||
//auto varVec = FindVarsWith<float>(vars, stringVec, true, true);
|
||||
auto varVec = FindVarsWithWithout<float>(vars, stringVec, withoutVec);
|
||||
auto varVec = FindVarsWith<float>(vars, stringVec, true, true);
|
||||
//auto varVec = FindVarsWithWithout<float>(vars, stringVec, withoutVec);
|
||||
|
||||
for (auto& it : varVec)
|
||||
{
|
||||
|
@ -58,7 +58,7 @@
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string><html><head/><body><p align="center"><span style=" font-size:10pt;">Fractorium 1.0.0.19</span></p><p align="center"><span style=" font-size:10pt;">A Qt-based fractal flame editor which uses a C++ re-write of the flam3 algorithm named Ember and a GPU capable version named EmberCL which implements a portion of the cuburn algorithm in OpenCL.</span></p><p align="center"><a href="http://fractorium.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">fractorium.com</span></a></p></body></html></string>
|
||||
<string><html><head/><body><p align="center"><span style=" font-size:10pt;">Fractorium 1.0.0.20</span></p><p align="center"><span style=" font-size:10pt;">A Qt-based fractal flame editor which uses a C++ re-write of the flam3 algorithm named Ember and a GPU capable version named EmberCL which implements a portion of the cuburn algorithm in OpenCL.</span></p><p align="center"><a href="http://fractorium.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">fractorium.com</span></a></p></body></html></string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::RichText</enum>
|
||||
@ -123,7 +123,7 @@ p, li { white-space: pre-wrap; }
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Palettes: </span><a href="https://www.deviantart.com/boxtail"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Boxtail</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/fardareismai"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">FarDareisMai</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/fractaldesire"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">FractalDesire</span></a><span style=" font-size:10pt;">, Rce, </span><a href="https://www.deviantart.com/rubydeva"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Rubydeva</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/tatasz"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Tatasz</span></a><span style=" font-size:10pt;"> (Public Domain)<br /></span><a href="http://famfamfam.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Silk</span></a><span style=" font-size:10pt;">: Mark James (Creative Commons Attribution 2.5 License)<br /></span><a href="http://momentumdesignlab.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Momentum</span></a><span style=" font-size:10pt;">: Momentum Design Lab (Creative Commons Attribution-ShareAlike 3.5 License)<br /></span><a href="http://everaldo.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Crystal Clear</span></a><span style=" font-size:10pt;">: Everaldo Coelho (LGPL)<br /></span><a href="http://openiconlibrary.sourceforge.net"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Open Icon Library</span></a><span style=" font-size:10pt;">: Jeff Israel (GPL, LGPL, Creative Commons, Public Domain)<br /></span><a href="http://icons.mysitemyway.com/category/3d-transparent-glass-icons/"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">3D Transparent Glass</span></a><span style=" font-size:10pt;">: iconsETC (Public Domain)<br /></span><a href="http://p.yusukekamiyamane.com"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Fugue</span></a><span style=" font-size:10pt;">: Yusuke Kamiyamane (Creative Commons Attribution 3.0 License)</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;"><br /></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">Benchmark and Example Flames:</span></p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://www.deviantart.com/c-91"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">C-91</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/b33rheart"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Gabor Timar</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/golubaja"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Golubaja</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/pillemaster"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Pillemaster</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/plangkye"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Plangkye</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/tatasz"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Tatasz</span></a><span style=" font-size:10pt;">, </span>< a href="https://www.deviantart.com/triptychaos"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Triptychaos</span></a><span style=" font-size:10pt;">, </span>< a href="https://www.deviantart.com/tyrantwave"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">TyrantWave</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/zy0rg"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Zy0rg</span></a></p></body></html></string>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="https://www.deviantart.com/c-91"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">C-91</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/b33rheart"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Gabor Timar</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/golubaja"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Golubaja</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/pillemaster"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Pillemaster</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/plangkye"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Plangkye</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/tatasz"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Tatasz</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/triptychaos"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Triptychaos</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/tyrantwave"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">TyrantWave</span></a><span style=" font-size:10pt;">, </span><a href="https://www.deviantart.com/zy0rg"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">Zy0rg</span></a></p></body></html></string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" />
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
|
||||
</startup>
|
||||
</configuration>
|
||||
</configuration>
|
||||
|
112
Source/apoconv/Properties/Resources.Designer.cs
generated
112
Source/apoconv/Properties/Resources.Designer.cs
generated
@ -8,64 +8,56 @@
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace apoconv.Properties
|
||||
{
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// 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()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[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("apoconv.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture
|
||||
{
|
||||
get
|
||||
{
|
||||
return resourceCulture;
|
||||
}
|
||||
set
|
||||
{
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
namespace apoconv.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// 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", "16.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() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("apoconv.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
34
Source/apoconv/Properties/Settings.Designer.cs
generated
34
Source/apoconv/Properties/Settings.Designer.cs
generated
@ -8,23 +8,19 @@
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace apoconv.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
namespace apoconv.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.5.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,10 +8,11 @@
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>apoconv</RootNamespace>
|
||||
<AssemblyName>apoconv</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<Deterministic>true</Deterministic>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
@ -22,6 +23,7 @@
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
@ -31,6 +33,7 @@
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
@ -65,6 +68,7 @@
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
|
Reference in New Issue
Block a user