Skip to content

Commit

Permalink
Visual Studio 2022 and update plugin-sdk
Browse files Browse the repository at this point in the history
  • Loading branch information
kong78 committed Mar 16, 2024
1 parent 8f21a63 commit 7e63180
Show file tree
Hide file tree
Showing 6 changed files with 103 additions and 94 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -348,3 +348,6 @@ MigrationBackup/

# Ionide (cross platform F# VS Code tools) working folder
.ionide/

# plugin-sdk
output/
17 changes: 6 additions & 11 deletions CollectiblesOnRadar.sln
Original file line number Diff line number Diff line change
@@ -1,25 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30309.148
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CollectiblesOnRadar", "CollectiblesOnRadar.vcxproj", "{B212DDA4-2A8E-45B2-914D-7BEEB31D06B1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
GTASA Release|x86 = GTASA Release|x86
GTASA zDebug|x86 = GTASA zDebug|x86
Release|Win32 = Release|Win32
Debug|Win32 = Debug|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B212DDA4-2A8E-45B2-914D-7BEEB31D06B1}.GTASA Release|x86.ActiveCfg = GTASA Release|Win32
{B212DDA4-2A8E-45B2-914D-7BEEB31D06B1}.GTASA Release|x86.Build.0 = GTASA Release|Win32
{B212DDA4-2A8E-45B2-914D-7BEEB31D06B1}.GTASA zDebug|x86.ActiveCfg = GTASA zDebug|Win32
{B212DDA4-2A8E-45B2-914D-7BEEB31D06B1}.GTASA zDebug|x86.Build.0 = GTASA zDebug|Win32
{B212DDA4-2A8E-45B2-914D-7BEEB31D06B1}.Release|Win32.ActiveCfg = Release|Win32
{B212DDA4-2A8E-45B2-914D-7BEEB31D06B1}.Release|Win32.Build.0 = Release|Win32
{B212DDA4-2A8E-45B2-914D-7BEEB31D06B1}.Debug|Win32.ActiveCfg = Debug|Win32
{B212DDA4-2A8E-45B2-914D-7BEEB31D06B1}.Debug|Win32.Build.0 = Debug|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9BAE1F08-5197-4243-A511-979CF59CF3E8}
EndGlobalSection
EndGlobal
95 changes: 51 additions & 44 deletions CollectiblesOnRadar.vcxproj
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="16.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="GTASA Release|Win32">
<Configuration>GTASA Release</Configuration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="GTASA zDebug|Win32">
<Configuration>GTASA zDebug</Configuration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
Expand All @@ -17,84 +17,91 @@
<RootNamespace>CollectiblesOnRadar</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='GTASA Release|Win32'" Label="Configuration">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='GTASA zDebug|Win32'" Label="Configuration">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v142</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='GTASA Release|Win32'">
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='GTASA zDebug|Win32'">
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='GTASA Release|Win32'">
<OutDir>$(GTA_SA_DIR)\scripts\</OutDir>
<IntDir>$(ProjectDir).obj\GTASA\Release\</IntDir>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<OutDir>output\asi\</OutDir>
<IntDir>output\obj\Release\</IntDir>
<TargetName>CollectiblesOnRadar.SA</TargetName>
<TargetExt>.asi</TargetExt>
<IncludePath>$(IncludePath);$(DIRECTX9_SDK_DIR)\Include\</IncludePath>
<LibraryPath>$(LibraryPath);$(DIRECTX9_SDK_DIR)\Lib\x86\</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='GTASA zDebug|Win32'">
<OutDir>$(GTA_SA_DIR)\scripts\</OutDir>
<IntDir>$(ProjectDir).obj\GTASA\Debug\</IntDir>
<TargetName>CollectiblesOnRadar.SA_d</TargetName>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<OutDir>output\asi\</OutDir>
<IntDir>output\obj\Debug\</IntDir>
<TargetName>CollectiblesOnRadar.SA</TargetName>
<TargetExt>.asi</TargetExt>
<IncludePath>$(IncludePath);$(DIRECTX9_SDK_DIR)\Include\</IncludePath>
<LibraryPath>$(LibraryPath);$(DIRECTX9_SDK_DIR)\Lib\x86\</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='GTASA Release|Win32'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CRT_NON_CONFORMING_SWPRINTFS;_USE_MATH_DEFINES;_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING;NDEBUG;GTASA;PLUGIN_SGV_10US;RW;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\source;$(PLUGIN_SDK_DIR)\shared;$(PLUGIN_SDK_DIR)\shared\game;$(PLUGIN_SDK_DIR)\plugin_SA;$(PLUGIN_SDK_DIR)\plugin_SA\game_SA;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DebugInformationFormat>None</DebugInformationFormat>
<Optimization>Full</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>false</SDLCheck>
<MinimalRebuild>false</MinimalRebuild>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<AdditionalIncludeDirectories>$(PLUGIN_SDK_DIR)\plugin_sa\;$(PLUGIN_SDK_DIR)\plugin_sa\game_sa\;$(PLUGIN_SDK_DIR)\shared\;$(PLUGIN_SDK_DIR)\shared\game\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NON_CONFORMING_SWPRINTFS;GTASA;GTAGAME_NAME="San Andreas";GTAGAME_ABBR="SA";GTAGAME_ABBRLOW="sa";GTAGAME_PROTAGONISTNAME="CJ";GTAGAME_CITYNAME="San Andreas";_LA_SUPPORT;_DX9_SDK_INSTALLED;PLUGIN_SGV_10US;PLUGIN_SGV_10EU;PLUGIN_SGV_11US;PLUGIN_SGV_11EU;PLUGIN_SGV_SR2;PLUGIN_SGV_SR2LV;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<LanguageStandard>stdcpplatest</LanguageStandard>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>false</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>No</GenerateDebugInformation>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>$(PLUGIN_SDK_DIR)\output\lib\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>plugin.lib;d3d9.lib;d3dx9.lib;%(AdditionalDependencies)</AdditionalDependencies>
<SubSystem>Windows</SubSystem>
<AdditionalDependencies>plugin.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(PLUGIN_SDK_DIR)\output\lib;$(DXSDK_DIR)\Lib\x86;$(PLUGIN_SDK_DIR)\shared\bass;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ImportLibrary>output\asi\CollectiblesOnRadar.SA.lib</ImportLibrary>
</Link>
<PostBuildEvent>
<Command>copy /y "$(TargetPath)" "$(GTA_SA_DIR)\scripts\CollectiblesOnRadar.SA.asi"</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='GTASA zDebug|Win32'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_CRT_NON_CONFORMING_SWPRINTFS;_USE_MATH_DEFINES;_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING;DEBUG;GTASA;PLUGIN_SGV_10US;RW;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\source;$(PLUGIN_SDK_DIR)\shared;$(PLUGIN_SDK_DIR)\shared\game;$(PLUGIN_SDK_DIR)\plugin_SA;$(PLUGIN_SDK_DIR)\plugin_SA\game_SA;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<Optimization>Disabled</Optimization>
<SDLCheck>false</SDLCheck>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<AdditionalIncludeDirectories>$(PLUGIN_SDK_DIR)\plugin_sa\;$(PLUGIN_SDK_DIR)\plugin_sa\game_sa\;$(PLUGIN_SDK_DIR)\shared\;$(PLUGIN_SDK_DIR)\shared\game\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_NON_CONFORMING_SWPRINTFS;GTASA;GTAGAME_NAME="San Andreas";GTAGAME_ABBR="SA";GTAGAME_ABBRLOW="sa";GTAGAME_PROTAGONISTNAME="CJ";GTAGAME_CITYNAME="San Andreas";_LA_SUPPORT;_DX9_SDK_INSTALLED;PLUGIN_SGV_10US;PLUGIN_SGV_10EU;PLUGIN_SGV_11US;PLUGIN_SGV_11EU;PLUGIN_SGV_SR2;PLUGIN_SGV_SR2LV;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<LanguageStandard>stdcpplatest</LanguageStandard>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<GenerateDebugInformation>Debug</GenerateDebugInformation>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>$(PLUGIN_SDK_DIR)\output\lib\;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>plugin_d.lib;d3d9.lib;d3dx9.lib;%(AdditionalDependencies)</AdditionalDependencies>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>plugin_d.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(PLUGIN_SDK_DIR)\output\lib;$(DXSDK_DIR)\Lib\x86;$(PLUGIN_SDK_DIR)\shared\bass;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<ImportLibrary>output\asi\CollectiblesOnRadar.SA.lib</ImportLibrary>
</Link>
<PostBuildEvent>
<Command>copy /y "$(TargetPath)" "$(GTA_SA_DIR)\scripts\CollectiblesOnRadar.SA.asi"</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="src\Settings.cpp" />
Expand All @@ -110,4 +117,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
</Project>
14 changes: 0 additions & 14 deletions CollectiblesOnRadar.vcxproj.filters

This file was deleted.

59 changes: 38 additions & 21 deletions src/Settings.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
#include "Settings.h"

#include <iostream>
#include "IniReader.h"

const std::string Settings::MAIN("MAIN");
const std::string Settings::COLORS("COLORS");
const std::string Settings::EXTRA("EXTRA");

// Default values

const unsigned int Settings::KEY_CODE_ON_OFF = VK_F12; // Default ON/OFF key
Expand All @@ -17,13 +20,11 @@ const CRGBA Settings::COLOR_DEFAULT(255, 255, 255);
// [MAIN]

unsigned int Settings::s_keyCodeOnOff = Settings::KEY_CODE_ON_OFF;

bool Settings::s_drawTags = true;
bool Settings::s_drawSnapshots = true;
bool Settings::s_drawHorseshoes = true;
bool Settings::s_drawOysters = true;
bool Settings::s_drawUSJs = true;

bool Settings::s_drawNearest = true;

// [COLORS]
Expand All @@ -39,7 +40,6 @@ CRGBA Settings::s_colorUSJ(Settings::COLOR_USJ);
bool Settings::s_drawBribes = false;
bool Settings::s_drawArmours = false;
bool Settings::s_drawWeapons = false;

CRGBA Settings::s_colorBribe(Settings::COLOR_DEFAULT);
CRGBA Settings::s_colorArmour(Settings::COLOR_DEFAULT);
CRGBA Settings::s_colorWeapon(Settings::COLOR_DEFAULT);
Expand All @@ -51,29 +51,46 @@ void Settings::read() {

s_keyCodeOnOff = static_cast<unsigned int>(iniReader.ReadInteger("MAIN", "on_off_key", static_cast<int>(KEY_CODE_ON_OFF)));

s_drawTags = iniReader.ReadBoolean("MAIN", "show_tags", true);
s_drawSnapshots = iniReader.ReadBoolean("MAIN", "show_snapshots", true);
s_drawHorseshoes = iniReader.ReadBoolean("MAIN", "show_horseshoes", true);
s_drawOysters = iniReader.ReadBoolean("MAIN", "show_oysters", true);
s_drawUSJs = iniReader.ReadBoolean("MAIN", "show_usjs", true);
s_drawTags = iniReader.ReadBoolean(MAIN, "show_tags", true);
s_drawSnapshots = iniReader.ReadBoolean(MAIN, "show_snapshots", true);
s_drawHorseshoes = iniReader.ReadBoolean(MAIN, "show_horseshoes", true);
s_drawOysters = iniReader.ReadBoolean(MAIN, "show_oysters", true);
s_drawUSJs = iniReader.ReadBoolean(MAIN, "show_usjs", true);

s_drawNearest = iniReader.ReadBoolean("MAIN", "show_nearest", true);
s_drawNearest = iniReader.ReadBoolean(MAIN, "show_nearest", true);

// [COLORS]

s_colorTag.Set(static_cast<unsigned int>(iniReader.ReadInteger("COLORS", "color_tag", static_cast<int>(COLOR_TAG.ToInt()))));
s_colorSnapshot.Set(static_cast<unsigned int>(iniReader.ReadInteger("COLORS", "color_snapshot", static_cast<int>(COLOR_SNAPSHOT.ToInt()))));
s_colorHorseshoe.Set(static_cast<unsigned int>(iniReader.ReadInteger("COLORS", "color_horseshoe", static_cast<int>(COLOR_HORSESHOE.ToInt()))));
s_colorOyster.Set(static_cast<unsigned int>(iniReader.ReadInteger("COLORS", "color_oyster", static_cast<int>(COLOR_OYSTER.ToInt()))));
s_colorUSJ.Set(static_cast<unsigned int>(iniReader.ReadInteger("COLORS", "color_usj", static_cast<int>(COLOR_USJ.ToInt()))));
s_colorTag.Set(toRGBA(iniReader.ReadString(COLORS, "color_tag", ""), COLOR_TAG.ToInt()));
s_colorSnapshot.Set(toRGBA(iniReader.ReadString(COLORS, "color_snapshot", ""), COLOR_SNAPSHOT.ToInt()));
s_colorHorseshoe.Set(toRGBA(iniReader.ReadString(COLORS, "color_horseshoe", ""), COLOR_HORSESHOE.ToInt()));
s_colorOyster.Set(toRGBA(iniReader.ReadString(COLORS, "color_oyster", ""), COLOR_OYSTER.ToInt()));
s_colorUSJ.Set(toRGBA(iniReader.ReadString(COLORS, "color_usj", ""), COLOR_USJ.ToInt()));

// [EXTRA]

s_drawBribes = iniReader.ReadBoolean("EXTRA", "show_bribes", false);
s_drawArmours = iniReader.ReadBoolean("EXTRA", "show_armours", false);
s_drawWeapons = iniReader.ReadBoolean("EXTRA", "show_weapons", false);
s_drawBribes = iniReader.ReadBoolean(EXTRA, "show_bribes", false);
s_drawArmours = iniReader.ReadBoolean(EXTRA, "show_armours", false);
s_drawWeapons = iniReader.ReadBoolean(EXTRA, "show_weapons", false);

s_colorBribe.Set(toRGBA(iniReader.ReadString(EXTRA, "color_bribe", ""), COLOR_DEFAULT.ToInt()));
s_colorArmour.Set(toRGBA(iniReader.ReadString(EXTRA, "color_armour", ""), COLOR_DEFAULT.ToInt()));
s_colorWeapon.Set(toRGBA(iniReader.ReadString(EXTRA, "color_weapon", ""), COLOR_DEFAULT.ToInt()));
}

s_colorBribe.Set(static_cast<unsigned int>(iniReader.ReadInteger("EXTRA", "color_bribe", static_cast<int>(COLOR_DEFAULT.ToInt()))));
s_colorArmour.Set(static_cast<unsigned int>(iniReader.ReadInteger("EXTRA", "color_armour", static_cast<int>(COLOR_DEFAULT.ToInt()))));
s_colorWeapon.Set(static_cast<unsigned int>(iniReader.ReadInteger("EXTRA", "color_weapon", static_cast<int>(COLOR_DEFAULT.ToInt()))));
unsigned int Settings::toRGBA(const std::string& str, unsigned int defaultValue)
{
//static const std::regex patternRGBA("^#[A-Fa-f0-9]{6,8}$");

// if (std::regex_match(str, patternRGBA))
try
{
char color[9] = "ffffffff";
str.copy(color, str.size() - 1, 1);
return static_cast<unsigned int>(std::stoul(color, nullptr, 16));
}
catch (...)
{}

return defaultValue;
}
9 changes: 5 additions & 4 deletions src/Settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@
class Settings
{
public:
static const std::string MAIN;
static const std::string COLORS;
static const std::string EXTRA;

// Default values

static const unsigned int KEY_CODE_ON_OFF;

static const CRGBA COLOR_TAG;
static const CRGBA COLOR_SNAPSHOT;
static const CRGBA COLOR_HORSESHOE;
Expand All @@ -20,13 +23,11 @@ class Settings
// [MAIN]

static unsigned int s_keyCodeOnOff;

static bool s_drawTags;
static bool s_drawSnapshots;
static bool s_drawHorseshoes;
static bool s_drawOysters;
static bool s_drawUSJs;

static bool s_drawNearest;

// [COLORS]
Expand All @@ -42,11 +43,11 @@ class Settings
static bool s_drawBribes;
static bool s_drawArmours;
static bool s_drawWeapons;

static CRGBA s_colorBribe;
static CRGBA s_colorArmour;
static CRGBA s_colorWeapon;

public:
static void read();
static unsigned int toRGBA(const std::string& str, unsigned int defaultValue);
};

0 comments on commit 7e63180

Please sign in to comment.