Bump version number to 2.3.1.
PiperOrigin-RevId: 493076656 Change-Id: I48c7a45b503c4a7363ea1455a4a3788262d007f7
This commit is contained in:
committed by
Copybara-Service
parent
ef695bb8a8
commit
73fb61e3e2
+1
-1
@@ -28,7 +28,7 @@ set(MSVC_INCREMENTAL_DEFAULT ON)
|
|||||||
|
|
||||||
project(
|
project(
|
||||||
mujoco
|
mujoco
|
||||||
VERSION 2.3.0
|
VERSION 2.3.1
|
||||||
DESCRIPTION "MuJoCo Physics Simulator"
|
DESCRIPTION "MuJoCo Physics Simulator"
|
||||||
HOMEPAGE_URL "https://mujoco.org"
|
HOMEPAGE_URL "https://mujoco.org"
|
||||||
)
|
)
|
||||||
|
|||||||
+62
-62
@@ -3,92 +3,92 @@ Changelog
|
|||||||
=========
|
=========
|
||||||
|
|
||||||
|
|
||||||
Upcoming version (not yet released)
|
Version 2.3.1 (December 5, 2022)
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
Python bindings
|
Python bindings
|
||||||
^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
- The ``simulate`` GUI is now available through the ``mujoco`` Python package as ``mujoco.viewer``.
|
1. The ``simulate`` GUI is now available through the ``mujoco`` Python package as ``mujoco.viewer``.
|
||||||
See :ref:`documentation<PyViewer>` for details. (Contribution by `Levi Burner <https://github.com/aftersomemath>`_.)
|
See :ref:`documentation<PyViewer>` for details. (Contribution by `Levi Burner <https://github.com/aftersomemath>`_.)
|
||||||
- The ``Renderer`` class from the MuJoCo tutorial Colab is now available directly in the native Python bindings.
|
#. The ``Renderer`` class from the MuJoCo tutorial Colab is now available directly in the native Python bindings.
|
||||||
|
|
||||||
General
|
General
|
||||||
^^^^^^^
|
^^^^^^^
|
||||||
|
|
||||||
- The tendon :at:`springlength` attribute can now take two values. Given two non-decreasing values, `springlength`
|
3. The tendon :at:`springlength` attribute can now take two values. Given two non-decreasing values, `springlength`
|
||||||
specifies a `deadband <https://en.wikipedia.org/wiki/Deadband>`_ range for spring stiffness. If the tendon length is
|
specifies a `deadband <https://en.wikipedia.org/wiki/Deadband>`_ range for spring stiffness. If the tendon length is
|
||||||
between the two values, the force is 0. If length is outside this range, the force behaves like a regular spring, with
|
between the two values, the force is 0. If length is outside this range, the force behaves like a regular spring, with
|
||||||
the spring resting length corresponding to the nearest :at:`springlength` value. This can be used to create tendons
|
the spring resting length corresponding to the nearest :at:`springlength` value. This can be used to create tendons
|
||||||
whose limits are enforced by springs rather than constraints, which are cheaper and easier to analyse. See
|
whose limits are enforced by springs rather than constraints, which are cheaper and easier to analyse. See
|
||||||
`tendon_springlength.xml <https://github.com/deepmind/mujoco/tree/main/test/engine/testdata/tendon_springlength.xml>`_
|
`tendon_springlength.xml <https://github.com/deepmind/mujoco/tree/main/test/engine/testdata/tendon_springlength.xml>`_
|
||||||
example model.
|
example model.
|
||||||
|
|
||||||
.. attention::
|
.. attention::
|
||||||
This is a minor breaking API change. ``mjModel.tendon_lengthspring`` now has size ``ntendon x 2`` rather than
|
This is a minor breaking API change. ``mjModel.tendon_lengthspring`` now has size ``ntendon x 2`` rather than
|
||||||
``ntendon x 1``.
|
``ntendon x 1``.
|
||||||
|
|
||||||
.. youtube:: -PJ6afdETUg
|
.. youtube:: -PJ6afdETUg
|
||||||
:align: right
|
:align: right
|
||||||
:height: 150px
|
:height: 150px
|
||||||
|
|
||||||
- Removed the requirement that stateless actuators come before stateful actuators.
|
#. Removed the requirement that stateless actuators come before stateful actuators.
|
||||||
- Added :ref:`mju_fill`, :ref:`mju_symmetrize` and :ref:`mju_eye` utility functions.
|
#. Added :ref:`mju_fill`, :ref:`mju_symmetrize` and :ref:`mju_eye` utility functions.
|
||||||
- Added :at:`gravcomp` attribute to :ref:`body<body>`, implementing gravity compensation and bouyancy.
|
#. Added :at:`gravcomp` attribute to :ref:`body<body>`, implementing gravity compensation and bouyancy.
|
||||||
See `balloons.xml <https://github.com/deepmind/mujoco/tree/main/model/balloons/balloons.xml>`_ example model.
|
See `balloons.xml <https://github.com/deepmind/mujoco/tree/main/model/balloons/balloons.xml>`_ example model.
|
||||||
- Renamed the ``cable`` plugin library to ``elasticity``.
|
#. Renamed the ``cable`` plugin library to ``elasticity``.
|
||||||
- Added :at:`actdim` attribute to :ref:`general actuators<actuator-general>`. Values greater than 1 are only allowed
|
#. Added :at:`actdim` attribute to :ref:`general actuators<actuator-general>`. Values greater than 1 are only allowed
|
||||||
for dyntype :at-val:`user`, as native activation dynamics are all scalar. Added example test implementing 2nd-order
|
for dyntype :at-val:`user`, as native activation dynamics are all scalar. Added example test implementing 2nd-order
|
||||||
activation dynamics to
|
activation dynamics to
|
||||||
`engine_forward_test.cc <https://github.com/deepmind/mujoco/blob/main/test/engine/engine_forward_test.cc>`_.
|
`engine_forward_test.cc <https://github.com/deepmind/mujoco/blob/main/test/engine/engine_forward_test.cc>`_.
|
||||||
- Improved particle :ref:`composite<body-composite>` type, which now permits a user-specified geometry and multiple
|
#. Improved particle :ref:`composite<body-composite>` type, which now permits a user-specified geometry and multiple
|
||||||
joints. See the two new examples:
|
joints. See the two new examples:
|
||||||
`particle_free.xml <https://github.com/deepmind/mujoco/tree/main/model/composite/particle_free.xml>`_ and
|
`particle_free.xml <https://github.com/deepmind/mujoco/tree/main/model/composite/particle_free.xml>`_ and
|
||||||
`particle_free2d.xml <https://github.com/deepmind/mujoco/tree/main/model/composite/particle_free2d.xml>`_.
|
`particle_free2d.xml <https://github.com/deepmind/mujoco/tree/main/model/composite/particle_free2d.xml>`_.
|
||||||
- Performance improvements for non-AVX configurations:
|
#. Performance improvements for non-AVX configurations:
|
||||||
|
|
||||||
- 14% faster ``mj_solveLD`` using `restrict <https://en.wikipedia.org/wiki/Restrict>`_. See `engine_core_smooth_benchmark_test
|
- 14% faster ``mj_solveLD`` using `restrict <https://en.wikipedia.org/wiki/Restrict>`_. See `engine_core_smooth_benchmark_test
|
||||||
<https://github.com/deepmind/mujoco/tree/main/test/benchmark/engine_core_smooth_benchmark_test.cc>`_.
|
<https://github.com/deepmind/mujoco/tree/main/test/benchmark/engine_core_smooth_benchmark_test.cc>`_.
|
||||||
- 50% faster ``mju_dotSparse`` using manual loop unroll. See `engine_util_sparse_benchmark_test
|
- 50% faster ``mju_dotSparse`` using manual loop unroll. See `engine_util_sparse_benchmark_test
|
||||||
<https://github.com/deepmind/mujoco/tree/main/test/benchmark/engine_util_sparse_benchmark_test.cc>`_.
|
<https://github.com/deepmind/mujoco/tree/main/test/benchmark/engine_util_sparse_benchmark_test.cc>`_.
|
||||||
- Added new :at:`solid` passive force plugin:
|
#. Added new :at:`solid` passive force plugin:
|
||||||
|
|
||||||
.. youtube:: AGcTGHbbze4
|
.. youtube:: AGcTGHbbze4
|
||||||
:align: right
|
:align: right
|
||||||
:height: 150px
|
:height: 150px
|
||||||
|
|
||||||
- This is new force field compatible with the :ref:`composite<body-composite>` particles.
|
- This is new force field compatible with the :ref:`composite<body-composite>` particles.
|
||||||
- Generates a tetrahedral mesh having particles with mass concentrated at vertices.
|
- Generates a tetrahedral mesh having particles with mass concentrated at vertices.
|
||||||
- Uses a piecewise-constant strain model equivalent to finite elements but expressed in a coordinate-free
|
- Uses a piecewise-constant strain model equivalent to finite elements but expressed in a coordinate-free
|
||||||
formulation. This implies that all quantities can be precomputed except edge elongation, as in a mass-spring model.
|
formulation. This implies that all quantities can be precomputed except edge elongation, as in a mass-spring model.
|
||||||
- Only suitable for small strains (large displacements but small deformations). Tetrahedra may invert if subject to
|
- Only suitable for small strains (large displacements but small deformations). Tetrahedra may invert if subject to
|
||||||
large loads.
|
large loads.
|
||||||
|
|
||||||
- Add API functions ``mj_loadPluginLibrary`` and ``mj_loadAllPluginLibraries``. The first function is identical to
|
#. Add API functions ``mj_loadPluginLibrary`` and ``mj_loadAllPluginLibraries``. The first function is identical to
|
||||||
``dlopen`` on a POSIX system, and to ``LoadLibraryA`` on Windows. The second function scans a specified directory for
|
``dlopen`` on a POSIX system, and to ``LoadLibraryA`` on Windows. The second function scans a specified directory for
|
||||||
all dynamic libraries file and loads each library found. Dynamic libraries opened by these functions are assumed to
|
all dynamic libraries file and loads each library found. Dynamic libraries opened by these functions are assumed to
|
||||||
register one or more MuJoCo plugins on load.
|
register one or more MuJoCo plugins on load.
|
||||||
- Add an optional ``visualize`` callback to plugins, which is called during ``mjv_updateScene``. This callback allows
|
#. Add an optional ``visualize`` callback to plugins, which is called during ``mjv_updateScene``. This callback allows
|
||||||
custom plugin visualizations. Enable stree visualization for the Cable plugin as an example.
|
custom plugin visualizations. Enable stress visualization for the Cable plugin as an example.
|
||||||
- Sensors of type :ref:`user<sensor-user>` no longer require :at:`objtype`, :at:`objname` and :at:`needstage`. If
|
#. Sensors of type :ref:`user<sensor-user>` no longer require :at:`objtype`, :at:`objname` and :at:`needstage`. If
|
||||||
unspecified, the objtype is now :ref:`mjOBJ_UNKNOWN<mjtObj>`. ``user`` sensors :at:`datatype` default is now
|
unspecified, the objtype is now :ref:`mjOBJ_UNKNOWN<mjtObj>`. ``user`` sensors :at:`datatype` default is now
|
||||||
:at-val:`"real"`, :at:`needstage` default is now :at-val:`"acc"`.
|
:at-val:`"real"`, :at:`needstage` default is now :at-val:`"acc"`.
|
||||||
- Add support for capsules in URDF import.
|
#. Add support for capsules in URDF import.
|
||||||
- On macOS, issue an informative error message when run under `Rosetta 2 <https://support.apple.com/en-gb/HT211861>`_
|
#. On macOS, issue an informative error message when run under `Rosetta 2 <https://support.apple.com/en-gb/HT211861>`_
|
||||||
translation on an Apple Silicon machine. Pre-built MuJoCo binaries make use of
|
translation on an Apple Silicon machine. Pre-built MuJoCo binaries make use of
|
||||||
`AVX <https://en.wikipedia.org/wiki/Advanced_Vector_Extensions>`_ instructions on x86-64 machines, which is not
|
`AVX <https://en.wikipedia.org/wiki/Advanced_Vector_Extensions>`_ instructions on x86-64 machines, which is not
|
||||||
supported by Rosetta 2. (Before this version, users only get a cryptic "Illegal instruction" message.)
|
supported by Rosetta 2. (Before this version, users only get a cryptic "Illegal instruction" message.)
|
||||||
|
|
||||||
Bug fixes
|
Bug fixes
|
||||||
^^^^^^^^^
|
^^^^^^^^^
|
||||||
|
|
||||||
- Fixed bug in ``mj_addFileVFS`` that was causing the file path to be ignored (introduced in 2.1.4).
|
17. Fixed bug in ``mj_addFileVFS`` that was causing the file path to be ignored (introduced in 2.1.4).
|
||||||
|
|
||||||
Simulate
|
Simulate
|
||||||
^^^^^^^^
|
^^^^^^^^
|
||||||
|
|
||||||
- Renamed the directory in which the ``simulate`` application searches for plugins from ``plugin`` to ``mujoco_plugin``.
|
18. Renamed the directory in which the ``simulate`` application searches for plugins from ``plugin`` to ``mujoco_plugin``.
|
||||||
- Mouse force perturbations are now applied at the selection point rather than the body center of mass.
|
#. Mouse force perturbations are now applied at the selection point rather than the body center of mass.
|
||||||
|
|
||||||
|
|
||||||
Version 2.3.0 (October 18, 2022)
|
Version 2.3.0 (October 18, 2022)
|
||||||
|
|||||||
+2
-2
@@ -30,14 +30,14 @@ _____
|
|||||||
|
|
||||||
The MuJoCo app needs to be run at least once before the native library can be used, in order to register the library as
|
The MuJoCo app needs to be run at least once before the native library can be used, in order to register the library as
|
||||||
a trusted binary. Then, copy the dynamic library file from
|
a trusted binary. Then, copy the dynamic library file from
|
||||||
``/Applications/MuJoCo.app/Contents/Frameworks/mujoco.framework/Versions/Current/libmujoco.2.3.0.dylib`` (it can be
|
``/Applications/MuJoCo.app/Contents/Frameworks/mujoco.framework/Versions/Current/libmujoco.2.3.1.dylib`` (it can be
|
||||||
found by browsing the contents of ``MuJoCo.app``) and rename it as ``mujoco.dylib``.
|
found by browsing the contents of ``MuJoCo.app``) and rename it as ``mujoco.dylib``.
|
||||||
|
|
||||||
Linux
|
Linux
|
||||||
_____
|
_____
|
||||||
|
|
||||||
Expand the ``tar.gz`` archive to ``~/.mujoco``. Then copy the dynamic library from
|
Expand the ``tar.gz`` archive to ``~/.mujoco``. Then copy the dynamic library from
|
||||||
``~/.mujoco/mujoco-2.3.0/lib/libmujoco.so.2.3.0`` and rename it as ``libmujoco.so``.
|
``~/.mujoco/mujoco-2.3.1/lib/libmujoco.so.2.3.1`` and rename it as ``libmujoco.so``.
|
||||||
|
|
||||||
Windows
|
Windows
|
||||||
_______
|
_______
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// header version; should match the library version as returned by mj_version()
|
// header version; should match the library version as returned by mj_version()
|
||||||
#define mjVERSION_HEADER 230
|
#define mjVERSION_HEADER 231
|
||||||
|
|
||||||
// needed to define size_t, fabs and log10
|
// needed to define size_t, fabs and log10
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|||||||
@@ -81,13 +81,13 @@ if(NOT TARGET mujoco)
|
|||||||
find_path(MUJOCO_FRAMEWORK mujoco.Framework HINTS ${MUJOCO_FRAMEWORK_DIR})
|
find_path(MUJOCO_FRAMEWORK mujoco.Framework HINTS ${MUJOCO_FRAMEWORK_DIR})
|
||||||
if(MUJOCO_FRAMEWORK)
|
if(MUJOCO_FRAMEWORK)
|
||||||
message("MuJoCo framework is at ${MUJOCO_FRAMEWORK}/mujoco.framework")
|
message("MuJoCo framework is at ${MUJOCO_FRAMEWORK}/mujoco.framework")
|
||||||
set(MUJOCO_LIBRARY ${MUJOCO_FRAMEWORK}/mujoco.framework/Versions/A/libmujoco.2.3.0.dylib)
|
set(MUJOCO_LIBRARY ${MUJOCO_FRAMEWORK}/mujoco.framework/Versions/A/libmujoco.2.3.1.dylib)
|
||||||
target_compile_options(mujoco INTERFACE -F${MUJOCO_FRAMEWORK})
|
target_compile_options(mujoco INTERFACE -F${MUJOCO_FRAMEWORK})
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT MUJOCO_FRAMEWORK)
|
if(NOT MUJOCO_FRAMEWORK)
|
||||||
find_library(MUJOCO_LIBRARY mujoco mujoco.2.3.0 HINTS ${MUJOCO_LIBRARY_DIR} REQUIRED)
|
find_library(MUJOCO_LIBRARY mujoco mujoco.2.3.1 HINTS ${MUJOCO_LIBRARY_DIR} REQUIRED)
|
||||||
find_path(MUJOCO_INCLUDE mujoco/mujoco.h HINTS ${MUJOCO_INCLUDE_DIR} REQUIRED)
|
find_path(MUJOCO_INCLUDE mujoco/mujoco.h HINTS ${MUJOCO_INCLUDE_DIR} REQUIRED)
|
||||||
message("MuJoCo is at ${MUJOCO_LIBRARY}")
|
message("MuJoCo is at ${MUJOCO_LIBRARY}")
|
||||||
message("MuJoCo headers are at ${MUJOCO_INCLUDE}")
|
message("MuJoCo headers are at ${MUJOCO_INCLUDE}")
|
||||||
|
|||||||
+1
-1
@@ -30,7 +30,7 @@ from setuptools import find_packages
|
|||||||
from setuptools import setup
|
from setuptools import setup
|
||||||
from setuptools.command import build_ext
|
from setuptools.command import build_ext
|
||||||
|
|
||||||
__version__ = '2.3.0'
|
__version__ = '2.3.1'
|
||||||
|
|
||||||
MUJOCO_CMAKE = 'MUJOCO_CMAKE'
|
MUJOCO_CMAKE = 'MUJOCO_CMAKE'
|
||||||
MUJOCO_CMAKE_ARGS = 'MUJOCO_CMAKE_ARGS'
|
MUJOCO_CMAKE_ARGS = 'MUJOCO_CMAKE_ARGS'
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ set(MSVC_INCREMENTAL_DEFAULT ON)
|
|||||||
|
|
||||||
project(
|
project(
|
||||||
mujoco_samples
|
mujoco_samples
|
||||||
VERSION 2.3.0
|
VERSION 2.3.1
|
||||||
DESCRIPTION "MuJoCo samples binaries"
|
DESCRIPTION "MuJoCo samples binaries"
|
||||||
HOMEPAGE_URL "https://mujoco.org"
|
HOMEPAGE_URL "https://mujoco.org"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ set(MUJOCO_DEP_VERSION_lodepng
|
|||||||
|
|
||||||
project(
|
project(
|
||||||
mujoco_simulate
|
mujoco_simulate
|
||||||
VERSION 2.3.0
|
VERSION 2.3.1
|
||||||
DESCRIPTION "MuJoCo simulate binaries"
|
DESCRIPTION "MuJoCo simulate binaries"
|
||||||
HOMEPAGE_URL "https://mujoco.org"
|
HOMEPAGE_URL "https://mujoco.org"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -35,8 +35,8 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define mjVERSION 230
|
#define mjVERSION 231
|
||||||
#define mjVERSIONSTRING "2.3.0"
|
#define mjVERSIONSTRING "2.3.1"
|
||||||
|
|
||||||
// names of disable flags
|
// names of disable flags
|
||||||
const char* mjDISABLESTRING[mjNDISABLE] = {
|
const char* mjDISABLESTRING[mjNDISABLE] = {
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ TEST_F(JacobianTest, SubtreeJacNoInternalAcc) {
|
|||||||
|
|
||||||
using VersionTest = MujocoTest;
|
using VersionTest = MujocoTest;
|
||||||
|
|
||||||
const char *const kExpectedVersionString = "2.3.0";
|
const char *const kExpectedVersionString = "2.3.1";
|
||||||
|
|
||||||
TEST_F(VersionTest, MjVersion) {
|
TEST_F(VersionTest, MjVersion) {
|
||||||
EXPECT_EQ(mj_version(), mjVERSION_HEADER);
|
EXPECT_EQ(mj_version(), mjVERSION_HEADER);
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class MujocoBinaryRetriever {
|
|||||||
if (AssetDatabase.LoadMainAssetAtPath(mujocoPath + "/mujoco.dylib") == null) {
|
if (AssetDatabase.LoadMainAssetAtPath(mujocoPath + "/mujoco.dylib") == null) {
|
||||||
File.Copy(
|
File.Copy(
|
||||||
"/Applications/MuJoCo.app/Contents/Frameworks" +
|
"/Applications/MuJoCo.app/Contents/Frameworks" +
|
||||||
"/mujoco.framework/Versions/Current/libmujoco.2.3.0.dylib",
|
"/mujoco.framework/Versions/Current/libmujoco.2.3.1.dylib",
|
||||||
mujocoPath + "/mujoco.dylib");
|
mujocoPath + "/mujoco.dylib");
|
||||||
AssetDatabase.Refresh();
|
AssetDatabase.Refresh();
|
||||||
}
|
}
|
||||||
@@ -45,7 +45,7 @@ public class MujocoBinaryRetriever {
|
|||||||
if (AssetDatabase.LoadMainAssetAtPath(mujocoPath + "/libmujoco.so") == null) {
|
if (AssetDatabase.LoadMainAssetAtPath(mujocoPath + "/libmujoco.so") == null) {
|
||||||
File.Copy(
|
File.Copy(
|
||||||
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) +
|
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) +
|
||||||
"/.mujoco/mujoco-2.3.0/lib/libmujoco.so.2.3.0",
|
"/.mujoco/mujoco-2.3.1/lib/libmujoco.so.2.3.1",
|
||||||
mujocoPath + "/libmujoco.so");
|
mujocoPath + "/libmujoco.so");
|
||||||
AssetDatabase.Refresh();
|
AssetDatabase.Refresh();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ public const int mjMAXLINEPNT = 1000;
|
|||||||
public const int mjMAXPLANEGRID = 200;
|
public const int mjMAXPLANEGRID = 200;
|
||||||
public const bool THIRD_PARTY_MUJOCO_MJXMACRO_H_ = true;
|
public const bool THIRD_PARTY_MUJOCO_MJXMACRO_H_ = true;
|
||||||
public const bool THIRD_PARTY_MUJOCO_MUJOCO_H_ = true;
|
public const bool THIRD_PARTY_MUJOCO_MUJOCO_H_ = true;
|
||||||
public const int mjVERSION_HEADER = 230;
|
public const int mjVERSION_HEADER = 231;
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------Enums------------------------------------
|
// ------------------------------------Enums------------------------------------
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "org.mujoco",
|
"name": "org.mujoco",
|
||||||
"displayName": "MuJoCo",
|
"displayName": "MuJoCo",
|
||||||
"version": "2.3.0",
|
"version": "2.3.1",
|
||||||
"description": "MuJoCo importer and runtime plug-in",
|
"description": "MuJoCo importer and runtime plug-in",
|
||||||
"dependencies": {},
|
"dependencies": {},
|
||||||
"author": {
|
"author": {
|
||||||
|
|||||||
Reference in New Issue
Block a user