Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
mantidproject
mantid
Commits
a5aafa68
Commit
a5aafa68
authored
Jan 27, 2021
by
Samuel Jones
Committed by
Peterson, Peter
Feb 17, 2021
Browse files
Re #30500 Remove mentions of ParaView that aren't otherwise relevant
parent
0791e7c6
Changes
47
Hide whitespace changes
Inline
Side-by-side
.flake8
View file @
a5aafa68
...
...
@@ -15,7 +15,6 @@ exclude =
instrument,
MantidPlot,
qt/applications/workbench/workbench/app/resources.py,
qt/paraview_ext,
qt/python/mantidqt/resources.py,
qt/python/mantidqt/dialogs/errorreports/resources_qt4.py
qt/python/mantidqt/dialogs/errorreports/resources_qt5.py
...
...
CMakeLists.txt
View file @
a5aafa68
...
...
@@ -76,11 +76,7 @@ include(Bootstrap)
# Configure Eigen early
include
(
Eigen
)
include
(
Span
)
# Set ParaView information since later items depend on it
# VATES flag. Requires ParaView
option
(
MAKE_VATES
"Switch for compiling the Vates project"
Off
)
include
(
Span
if
(
MSVC
)
include
(
MSVCSetup
)
...
...
DEPENDENCY_LICENSES.md
View file @
a5aafa68
...
...
@@ -36,7 +36,6 @@
| toml | x | | x | MIT | https://github.com/toml-lang/toml/blob/master/LICENSE |
| Google Flatbuffers | x | | | Apache | https://github.com/google/flatbuffers/blob/master/LICENSE.txt |
| kafka | x | | | apache-2.0 | http://www.apache.org/licenses/ |
| Paraview | x | x | | BSD | https://www.paraview.org/paraview-license/ |
| PeriodicTable.py | | x | x | Public Domain | https://pypi.org/project/periodictable/ |
| Eigen | x | | | Mozilla Public License | http://eigen.tuxfamily.org/index.php?title=Main_Page#License |
| muparser | x | x | | MIT | https://beltoforion.de/article.php?a=muparser |
...
...
Framework/DataObjects/inc/MantidDataObjects/MDHistoWorkspace.h
View file @
a5aafa68
...
...
@@ -29,7 +29,7 @@ namespace DataObjects {
* MDEventWorkspace. Typically it has 3 or 4 dimensions, but there is no
* real limit to it.
*
* This will be used by ParaView e.g. for visualization.
* This will be used by ParaView
or Sliceviewer
e.g. for visualization.
*
* @author Janik Zikovsky
* @date 2011-03-24 11:21:06.280523
...
...
Framework/Doxygen/CMakeLists.txt
View file @
a5aafa68
...
...
@@ -90,9 +90,4 @@ if(DOXYGEN_FOUND)
${
CMAKE_CURRENT_BINARY_DIR
}
/../../doxygen/html/Mantid_Logo_Transparent.png
${
CMAKE_CURRENT_BINARY_DIR
}
/doxy_header.html
)
# remove file that was configured for mantidplot
if
(
EXISTS
"
${
CMAKE_SOURCE_DIR
}
/Framework/Kernel/src/ParaViewVersion.cpp"
)
file
(
REMOVE
"
${
CMAKE_SOURCE_DIR
}
/Framework/Kernel/src/ParaViewVersion.cpp"
)
endif
()
endif
(
DOXYGEN_FOUND
)
Framework/Kernel/.gitignore
View file @
a5aafa68
inc/MantidKernel/PocoVersion.h
src/MantidVersion.cpp
src/ParaViewVersion.cpp
Framework/Kernel/CMakeLists.txt
View file @
a5aafa68
...
...
@@ -564,8 +564,6 @@ set(FRAMEWORK_PLUGINS_DIR ".")
set
(
QT_PLUGINS_DIR
"."
)
# %V will be replaced with the major version of Qt at runtime
set
(
PV_PLUGINS_DIR
""
)
set
(
PARAVIEW_PYTHON_PATHS
""
)
set
(
IGNORE_PARAVIEW
"0"
)
set
(
UPDATE_INSTRUMENT_DEFINTITIONS
"0"
)
set
(
CHECK_FOR_NEW_MANTID_VERSION
"0"
)
set
(
ENABLE_USAGE_REPORTS
"0"
)
...
...
@@ -584,8 +582,6 @@ set(HTML_ROOT ${DOCS_BUILDDIR}/html)
# configuration below
if
(
MPI_BUILD
)
set
(
CONSOLEPATTERN
"%H:%M:%S,%i [%N:%P] %p %s - %t"
)
set
(
PV_PLUGINS_DIR
""
)
set
(
IGNORE_PARAVIEW
"1"
)
else
()
set
(
CONSOLEPATTERN
"%s-[%p] %t"
)
endif
()
...
...
@@ -626,7 +622,6 @@ endif()
set
(
FRAMEWORK_PLUGINS_DIR
${
MANTID_ROOT
}
/plugins
)
set
(
PYTHONPLUGIN_DIRS
"
${
FRAMEWORK_PLUGINS_DIR
}
/python"
)
set
(
PYTHONPLUGIN_MANIFEST
"
${
PYTHONPLUGIN_DIRS
}
/python-plugin-manifest.txt"
)
set
(
PARAVIEW_PYTHON_PATHS
""
)
set
(
UPDATE_INSTRUMENT_DEFINTITIONS
"
${
ENABLE_NETWORK_ACCESS
}
"
)
set
(
CHECK_FOR_NEW_MANTID_VERSION
"
${
ENABLE_NETWORK_ACCESS
}
"
)
set
(
ENABLE_USAGE_REPORTS
"
${
ENABLE_NETWORK_ACCESS
}
"
)
...
...
@@ -639,8 +634,6 @@ set(HTML_ROOT ../share/doc/html)
if
(
${
CMAKE_PROJECT_NAME
}
MATCHES
"MantidFramework"
)
set
(
QT_PLUGINS_DIR
""
)
set
(
COLORMAPS_FOLDER
""
)
set
(
PV_PLUGINS_DIR
""
)
set
(
IGNORE_PARAVIEW
"1"
)
else
()
set
(
QT_PLUGINS_DIR
"
${
MANTID_ROOT
}
/plugins/qt%V"
)
set
(
PV_PLUGINS_DIR
"
${
MANTID_ROOT
}
/plugins/
${
PVPLUGINS_SUBDIR
}
/qt%V"
)
...
...
Framework/Kernel/src/ErrorReporter.cpp
View file @
a5aafa68
...
...
@@ -96,9 +96,6 @@ std::string ErrorReporter::generateErrorMessage() const {
message
[
"osVersion"
]
=
ConfigService
::
Instance
().
getOSVersion
();
message
[
"osReadable"
]
=
ConfigService
::
Instance
().
getOSVersionReadable
();
// legacy interface requires paraview version
message
[
"ParaView"
]
=
0
;
// mantid version and sha1
message
[
"mantidVersion"
]
=
MantidVersion
::
version
();
message
[
"mantidSha1"
]
=
MantidVersion
::
revisionFull
();
...
...
Framework/Kernel/src/UsageService.cpp
View file @
a5aafa68
...
...
@@ -273,9 +273,6 @@ std::string UsageServiceImpl::generateStartupMessage() {
message
[
"osVersion"
]
=
ConfigService
::
Instance
().
getOSVersion
();
message
[
"osReadable"
]
=
ConfigService
::
Instance
().
getOSVersionReadable
();
// legacy interface requires paraview version
message
[
"ParaView"
]
=
0
;
// mantid version and sha1
message
[
"mantidVersion"
]
=
MantidVersion
::
version
();
message
[
"mantidSha1"
]
=
MantidVersion
::
revisionFull
();
...
...
Framework/Kernel/test/ErrorReporterTest.h
View file @
a5aafa68
...
...
@@ -51,7 +51,7 @@ public:
reader
.
parse
(
message
,
root
);
auto
members
=
root
.
getMemberNames
();
const
std
::
vector
<
std
::
string
>
expectedMembers
{
"ParaView"
,
"application"
,
"host"
,
"mantidSha1"
,
"mantidVersion"
,
"application"
,
"host"
,
"mantidSha1"
,
"mantidVersion"
,
"osArch"
,
"osName"
,
"osReadable"
,
"osVersion"
,
"uid"
,
"facility"
,
"upTime"
,
"exitCode"
};
for
(
auto
expectedMember
:
expectedMembers
)
{
...
...
@@ -77,7 +77,7 @@ public:
reader
.
parse
(
message
,
root
);
auto
members
=
root
.
getMemberNames
();
const
std
::
vector
<
std
::
string
>
expectedMembers
{
"ParaView"
,
"application"
,
"host"
,
"mantidSha1"
,
"application"
,
"host"
,
"mantidSha1"
,
"mantidVersion"
,
"osArch"
,
"osName"
,
"osReadable"
,
"osVersion"
,
"uid"
,
"facility"
,
"upTime"
,
"exitCode"
,
"textBox"
,
"name"
,
"email"
};
...
...
@@ -107,7 +107,7 @@ public:
reader
.
parse
(
message
,
root
);
auto
members
=
root
.
getMemberNames
();
const
std
::
vector
<
std
::
string
>
expectedMembers
{
"ParaView"
,
"application"
,
"host"
,
"mantidSha1"
,
"mantidVersion"
,
"application"
,
"host"
,
"mantidSha1"
,
"mantidVersion"
,
"osArch"
,
"osName"
,
"osReadable"
,
"osVersion"
,
"uid"
,
"facility"
,
"upTime"
,
"exitCode"
,
"textBox"
,
"name"
,
"email"
,
"stacktrace"
};
...
...
@@ -138,7 +138,7 @@ public:
reader
.
parse
(
message
,
root
);
auto
members
=
root
.
getMemberNames
();
const
std
::
vector
<
std
::
string
>
expectedMembers
{
"ParaView"
,
"application"
,
"host"
,
"mantidSha1"
,
"mantidVersion"
,
"application"
,
"host"
,
"mantidSha1"
,
"mantidVersion"
,
"osArch"
,
"osName"
,
"osReadable"
,
"osVersion"
,
"uid"
,
"facility"
,
"upTime"
,
"exitCode"
,
"textBox"
,
"name"
,
"email"
,
"stacktrace"
};
...
...
Framework/Kernel/test/UsageServiceTest.h
View file @
a5aafa68
...
...
@@ -70,7 +70,7 @@ public:
reader
.
parse
(
message
,
root
);
auto
members
=
root
.
getMemberNames
();
std
::
vector
<
std
::
string
>
expectedMembers
{
"ParaView"
,
"application"
,
"host"
,
"mantidSha1"
,
"mantidVersion"
,
"application"
,
"host"
,
"mantidSha1"
,
"mantidVersion"
,
"osArch"
,
"osName"
,
"osReadable"
,
"osVersion"
,
"uid"
};
for
(
auto
expectedMember
:
expectedMembers
)
{
TSM_ASSERT
(
expectedMember
+
" not found"
,
...
...
Framework/MDAlgorithms/CMakeLists.txt
View file @
a5aafa68
...
...
@@ -85,7 +85,6 @@ set(SRC_FILES
src/MinusMD.cpp
src/MultiplyMD.cpp
src/NotMD.cpp
src/OneStepMDEW.cpp
src/OrMD.cpp
src/PlusMD.cpp
src/PowerMD.cpp
...
...
@@ -202,7 +201,6 @@ set(
inc/MantidMDAlgorithms/MinusMD.h
inc/MantidMDAlgorithms/MultiplyMD.h
inc/MantidMDAlgorithms/NotMD.h
inc/MantidMDAlgorithms/OneStepMDEW.h
inc/MantidMDAlgorithms/OrMD.h
inc/MantidMDAlgorithms/PlusMD.h
inc/MantidMDAlgorithms/PowerMD.h
...
...
@@ -310,7 +308,6 @@ set(TEST_FILES
MinusMDTest.h
MultiplyMDTest.h
NotMDTest.h
OneStepMDEWTest.h
OrMDTest.h
PlusMDTest.h
PowerMDTest.h
...
...
Framework/MDAlgorithms/inc/MantidMDAlgorithms/OneStepMDEW.h
deleted
100644 → 0
View file @
0791e7c6
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
// NScD Oak Ridge National Laboratory, European Spallation Source,
// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
// SPDX - License - Identifier: GPL - 3.0 +
#pragma once
#include
"MantidAPI/DeprecatedAlgorithm.h"
#include
"MantidKernel/System.h"
namespace
Mantid
{
namespace
MDAlgorithms
{
/** OneStepMDEW : Assumes elastic diffration. Load Event data and immediately
*converts to MDEvent with Lorentz correction applied.
*
* @author
* @date 2011-04-06 10:19:10.284945
*/
class
DLLExport
OneStepMDEW
:
public
API
::
Algorithm
,
API
::
DeprecatedAlgorithm
{
public:
OneStepMDEW
();
/// Algorithm's name for identification
const
std
::
string
name
()
const
override
{
return
"OneStepMDEW"
;
};
/// Summary of algorithms purpose
const
std
::
string
summary
()
const
override
{
return
"Create a MDEventWorkspace in one step from a EventNexus file. For "
"use by Paraview loader."
;
}
/// Algorithm's version for identification
int
version
()
const
override
{
return
1
;
};
/// Algorithm's category for identification
const
std
::
string
category
()
const
override
{
return
"MDAlgorithms
\\
Creation"
;
}
private:
/// Initialise the properties
void
init
()
override
;
/// Run the algorithm
void
exec
()
override
;
};
}
// namespace MDAlgorithms
}
// namespace Mantid
Framework/MDAlgorithms/src/OneStepMDEW.cpp
deleted
100644 → 0
View file @
0791e7c6
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
// NScD Oak Ridge National Laboratory, European Spallation Source,
// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
// SPDX - License - Identifier: GPL - 3.0 +
#include
"MantidMDAlgorithms/OneStepMDEW.h"
#include
"MantidAPI/FileProperty.h"
#include
"MantidAPI/FrameworkManager.h"
#include
"MantidAPI/IMDEventWorkspace.h"
#include
"MantidDataObjects/EventWorkspace.h"
#include
"MantidKernel/System.h"
//#include "MantidNexus/LoadEventNexus.h"
//#include "MantidDataObjects/ConvertToDiffractionMDWorkspace.h"
namespace
Mantid
{
namespace
MDAlgorithms
{
// Register the algorithm into the AlgorithmFactory
DECLARE_ALGORITHM
(
OneStepMDEW
)
using
namespace
Mantid
::
Kernel
;
using
namespace
Mantid
::
API
;
using
namespace
Mantid
::
DataObjects
;
//----------------------------------------------------------------------------------------------
/** Constructor
*/
OneStepMDEW
::
OneStepMDEW
()
{
this
->
useAlgorithm
(
"ConvertToDiffractionMDWorkspace"
);
}
//----------------------------------------------------------------------------------------------
/** Initialize the algorithm's properties.
*/
void
OneStepMDEW
::
init
()
{
this
->
declareProperty
(
std
::
make_unique
<
FileProperty
>
(
"Filename"
,
""
,
FileProperty
::
Load
,
".nxs"
),
"The name (including its full or relative path) of the Nexus file to
\n
"
"attempt to load. The file extension must either be .nxs or .NXS"
);
this
->
declareProperty
(
std
::
make_unique
<
WorkspaceProperty
<
Workspace
>>
(
"OutputWorkspace"
,
""
,
Direction
::
Output
),
"Name of the output MDEventWorkspace."
);
}
//----------------------------------------------------------------------------------------------
/** Execute the algorithm.
*/
void
OneStepMDEW
::
exec
()
{
std
::
string
tempWsName
=
getPropertyValue
(
"OutputWorkspace"
)
+
"_nxs"
;
// -------- First we load the event nexus file -------------
Algorithm_sptr
loadAlg
=
createChildAlgorithm
(
"LoadEventNexus"
,
0
,
2
);
loadAlg
->
initialize
();
loadAlg
->
setPropertyValue
(
"Filename"
,
getPropertyValue
(
"Filename"
));
loadAlg
->
setPropertyValue
(
"OutputWorkspace"
,
tempWsName
);
loadAlg
->
executeAsChildAlg
();
Workspace_sptr
temp
=
loadAlg
->
getProperty
(
"OutputWorkspace"
);
IEventWorkspace_sptr
tempWS
=
std
::
dynamic_pointer_cast
<
IEventWorkspace
>
(
temp
);
// --------- Now Convert -------------------------------
Algorithm_sptr
childAlg
=
createChildAlgorithm
(
"ConvertToDiffractionMDWorkspace"
,
2
,
4
,
true
,
1
);
childAlg
->
setProperty
(
"InputWorkspace"
,
tempWS
);
childAlg
->
setProperty
<
bool
>
(
"ClearInputWorkspace"
,
false
);
childAlg
->
setProperty
<
bool
>
(
"LorentzCorrection"
,
true
);
childAlg
->
executeAsChildAlg
();
IMDEventWorkspace_sptr
outWS
=
childAlg
->
getProperty
(
"OutputWorkspace"
);
setProperty
<
Workspace_sptr
>
(
"OutputWorkspace"
,
outWS
);
}
}
// namespace MDAlgorithms
}
// namespace Mantid
Framework/MDAlgorithms/test/OneStepMDEWTest.h
deleted
100644 → 0
View file @
0791e7c6
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
// NScD Oak Ridge National Laboratory, European Spallation Source,
// Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
// SPDX - License - Identifier: GPL - 3.0 +
#pragma once
#include
<cxxtest/TestSuite.h>
#include
"MantidAPI/AnalysisDataService.h"
#include
"MantidAPI/IMDEventWorkspace.h"
#include
"MantidDataObjects/MDEventWorkspace.h"
#include
"MantidMDAlgorithms/OneStepMDEW.h"
using
namespace
Mantid
::
API
;
using
namespace
Mantid
::
MDAlgorithms
;
class
OneStepMDEWTest
:
public
CxxTest
::
TestSuite
{
public:
void
test_Init
()
{
OneStepMDEW
alg
;
TS_ASSERT_THROWS_NOTHING
(
alg
.
initialize
())
TS_ASSERT
(
alg
.
isInitialized
())
}
void
test_exec
()
{
OneStepMDEW
alg
;
TS_ASSERT_THROWS_NOTHING
(
alg
.
initialize
())
TS_ASSERT
(
alg
.
isInitialized
())
alg
.
setPropertyValue
(
"Filename"
,
"HYS_11092_event.nxs"
);
alg
.
setPropertyValue
(
"OutputWorkspace"
,
"OneStepMDEWTest"
);
alg
.
execute
();
TS_ASSERT
(
alg
.
isExecuted
());
IMDEventWorkspace_sptr
out
;
TS_ASSERT_THROWS_NOTHING
(
out
=
std
::
dynamic_pointer_cast
<
IMDEventWorkspace
>
(
AnalysisDataService
::
Instance
().
retrieve
(
"OneStepMDEWTest"
)););
TS_ASSERT
(
out
);
if
(
!
out
)
return
;
}
};
Framework/Properties/Mantid.properties.template
View file @
a5aafa68
...
...
@@ -32,9 +32,6 @@ framework.plugins.directory = @FRAMEWORK_PLUGINS_DIR@
# Libraries to skip. The strings are searched for when loading libraries so they don't need to be exact
framework.plugins.exclude = Qt4;Qt5
# Where to find mantid paraview plugin libraries
pvplugins.directory = @PV_PLUGINS_DIR@
# Where to find Mantid Qt plugin libraries
mantidqt.plugins.directory = @QT_PLUGINS_DIR@
...
...
@@ -80,18 +77,6 @@ pythonalgorithms.refresh.allowed = 0
# Use forward slash / for all paths
datasearch.directories = @DATADIRS@
# Path to the ParaView bin directory, i.e. the directory containing the paraview executable
# Warning: Mantid is compiled against a specific version of ParaView. Ensure that this path
# points to the ParaView obtained from the Mantid download page
paraview.path = @PARAVIEW_APP_BIN_DIR@
# A semi-colon(;) separated list of directories to use to search for data
# Use forward slash / for all paths
paraview.pythonpaths = @PARAVIEW_PYTHON_PATHS@
# Whether to look for ParaView (0 = try to use, 1 = don't use).
paraview.ignore = @IGNORE_PARAVIEW@
# Root of html documentation (kept as unix-style path)
docs.html.root = @HTML_ROOT@
...
...
Framework/PythonInterface/test/python/mantid/kernel/ConfigServiceTest.py
View file @
a5aafa68
...
...
@@ -161,8 +161,7 @@ class ConfigServiceTest(unittest.TestCase):
'curvefitting.defaultPeak'
,
'curvefitting.findPeaksFWHM'
,
'curvefitting.findPeaksTolerance'
,
'curvefitting.guiExclude'
,
'logging.channels.consoleChannel.class'
,
'logging.channels.consoleChannel.formatter'
,
'logging.formatters.f1.class'
,
'logging.formatters.f1.pattern'
,
'logging.formatters.f1.times'
,
'logging.loggers.root.channel.channel1'
,
'logging.loggers.root.channel.class'
,
'MantidOptions.ReusePlotInstances'
,
'mantidqt.python_interfaces'
,
'mantidqt.python_interfaces_directory'
,
'paraview.ignore'
,
'paraview.path'
,
'paraview.pythonpaths'
,
'pvplugins.directory'
'mantidqt.python_interfaces'
,
'mantidqt.python_interfaces_directory'
]
# create the list of things
...
...
Testing/SystemTests/lib/systemtests/systemtesting.py
View file @
a5aafa68
...
...
@@ -1207,9 +1207,6 @@ class MantidFrameworkConfig:
# Save path
config
[
'defaultsave.directory'
]
=
self
.
__saveDir
# Do not show paraview dialog
config
[
'paraview.ignore'
]
=
"1"
# Do not update instrument definitions
config
[
'UpdateInstrumentDefinitions.OnStartup'
]
=
"0"
...
...
buildconfig/CMake/CommonSetup.cmake
View file @
a5aafa68
...
...
@@ -37,16 +37,6 @@ enable_testing()
# We want shared libraries everywhere
set
(
BUILD_SHARED_LIBS On
)
if
(
CMAKE_GENERATOR MATCHES
"Visual Studio"
OR CMAKE_GENERATOR MATCHES
"Xcode"
)
set
(
PVPLUGINS_LIBRARY_OUTPUT_DIRECTORY
${
CMAKE_LIBRARY_OUTPUT_DIRECTORY
}
/$<CONFIG>/plugins/paraview
)
else
()
set
(
PVPLUGINS_LIBRARY_OUTPUT_DIRECTORY
${
CMAKE_LIBRARY_OUTPUT_DIRECTORY
}
/plugins/paraview
)
endif
()
# This allows us to group targets logically in Visual Studio
set_property
(
GLOBAL PROPERTY USE_FOLDERS ON
)
...
...
buildconfig/CMake/DarwinSetup.cmake
View file @
a5aafa68
...
...
@@ -79,8 +79,7 @@ set(DL_ORIGIN_TAG @loader_path)
# Generate a target to put a mantidpython wrapper in the appropriate directory
if
(
NOT TARGET mantidpython
)
# TODO path needs to be removed from appropriate scripts
set
(
PARAVIEW_PYTHON_PATHS
""
)
# TODO path needs to be removed from appropriate script
configure_file
(
${
CMAKE_MODULE_PATH
}
/Packaging/osx/mantidpython.in
${
CMAKE_RUNTIME_OUTPUT_DIRECTORY
}
/mantidpython @ONLY
...
...
@@ -95,8 +94,6 @@ if(NOT TARGET mantidpython)
)
# Configure install script at the same time. Doing it later causes a warning
# from ninja.
set
(
PARAVIEW_PYTHON_PATHS
""
)
set
(
PYTHONHOME
"
\$
{INSTALLDIR}/Frameworks/Python.framework/Versions/
${
Python_VERSION_MAJOR
}
.
${
Python_VERSION_MINOR
}
"
)
...
...
Prev
1
2
3
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment