Skip to content

Commit

Permalink
5.4.1.0 2022-11-27, leisure
Browse files Browse the repository at this point in the history
Added
 - net: Add and document network messages in protocol.h (backport) #2533 (@Pythonix)
 - Define MAX_DIGITS_BTC for magic number in BitcoinUnits::format #2555 (@barton2526)
 - rpc: Implementation of getmrcinfo #2570 (@jamescowens)
 - init: Add init error message if -printtoconsole and -daemon specified simultaneously #2571 (@jamescowens)
 - rpc: getmrcinfo part 2 - add calculated minimum fees and fee boosting and by CPID reporting #2575 (@jamescowens)
 - fs: fully initialize `_OVERLAPPED` for win32 #2587 (@div72)
 - util: Diagnose Lib Version #1 #2573 (@MinaFarhan)
 - util: Implement core diagnostics #2 (@jamescowens)
 - util: modify Win32LockedPageAllocator to query windows for limit. #2536 (@div72)
 - gui, voting: Implement information for wallet holder's votes on poll info cards #2605 (@jamescowens)

Changed
 - scripted-diff: Drop Darwin version for better maintainability #2557 (@barton2526)
 - build: Require gcc8 on Ubuntu Bionic to enable C++17 features #2579 (@barton2526)
 - util: Replace use of locale dependent atoi(…) with locale-independent std::from_chars(…) (C++17) #2564 (@barton2526)
 - translation: Translation updates #2581 (@jamescowens)
 - depends: update urls for dmg tools #2583 (@div72)
 - Use ReadLE64 in uint256::GetUint64 instead of duplicating logic #2586 (@div72)
 - util: Make Parse{Int,UInt}{32,64} use locale independent std::from_chars(…) (C++17) instead of locale dependent strto{l,ll,ul,ull} #2592 (@barton2526)
 - build: don't set PORT=no in config.site #2593 (@barton2526)
 - build: Replace `which` command with `command -v` #2595 (@barton2526)
 - build: update ax_cxx_compile_stdcxx to serial 14 #2596 (@barton2526)
 - gui: Changed the unlocked for staking only icons to green #2598 (@delta1513)
 - gui: Translation updates #2599 (@jamescowens)
 - build: update CI for linter and actions version #2606 (@jamescowens)
 - gui: Update translations #2608 (@jamescowens)

Removed
 - refactor: remove unused c-string variant of atoi64() #2562 (@barton2526)
 - refactor: Remove unused CDataStream::rdbuf method #2585 (@div72)

Fixed
 - net: Fix some benign races (backport) #2532 (@Pythonix)
 - rpc: fix invalid parameter error codes for {sign,verify}message RPCs #2556 (@barton2526)
 - build: Fix x86_64 <-> arm64 cross-compiling for macOS #2560 (@barton2526)
 - rpc, mrc: Fix field name and initialization of mrc_fees_to_staker #2567 (@jamescowens)
 - gui: Add missing resizeTableColumns to fix send address book column widths #2569 (@jamescowens)
 - accrual: rebuild snapshot registry on corruption instead of crashing #2577 (@div72)
 - doc: Fix link to MurmurHash3.cpp (moved from Google Code to Github) #2584 (@div72)
 - fix help text for `revokebeacon` command #2591 (@Pythonix)
 - util: Fix spelling error in gridcoinresearchd.cpp #2590 (@jamescowens)
 - depends: always use correct ar for win qt build #2588 (@div72)
 - util: Fix some bugs due to new implementation and change in BOINC dir handling (@jamescowens)
 - util: Diagnose lib - Implement changes to solve crash on some Boost 1.66 machines #2597 (@jamescowens)
 - contrib: Check for `patch` command, Check for `wget` command #2594 (@barton2526)
 - build: Check std::system for -[alert|block|wallet]notify #2582 (@barton2526)
 - gui: Changed the wording on the tooltip for the address book #2602 (@delta1513)
 - build: pass win32-dll to LT_INIT() #2601 (@barton2526)
 - build: minor cleanups to native_clang package #2600 (@barton2526)
 - util: restore translations to diagnostics #2603 (@jamescowens)
 - refactor: Fix problems found by valgrind #2607 (@jamescowens)
  • Loading branch information
jamescowens committed Nov 27, 2022
2 parents c4ff381 + b15c055 commit 6a4285a
Show file tree
Hide file tree
Showing 147 changed files with 15,464 additions and 11,060 deletions.
14 changes: 7 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ jobs:
OS_NAME: linux
steps:
- name: checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: current time for cache
run: echo "TIMESTAMP=$(date +%s)" >> $GITHUB_ENV
- name: cache
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: |
./depends/built
Expand All @@ -55,11 +55,11 @@ jobs:
OS_NAME: macos
steps:
- name: checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: current time for cache
run: echo "TIMESTAMP=$(date +%s)" >> $GITHUB_ENV
- name: cache
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: |
./ci/scratch/.ccache
Expand Down Expand Up @@ -87,11 +87,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: setup-python
uses: actions/setup-python@v2
uses: actions/setup-python@v3
with:
python-version: 3.6
python-version: 3.9
- name: lint
run: |
set -o errexit; source ./ci/lint/04_install.sh
Expand Down
2 changes: 1 addition & 1 deletion .tx/config
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[main]
host = https://www.transifex.com

[gridcoin.src-qt-locale-bitcoin-en-ts--development]
[o:gridcoin:p:gridcoin:r:src-qt-locale-bitcoin-en-ts--development]
file_filter = src/qt/locale/bitcoin_<lang>.xlf
source_file = src/qt/locale/bitcoin_en.xlf
source_lang = en
Expand Down
61 changes: 58 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,61 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/)
and this project adheres to [Semantic Versioning](https://semver.org/).

## [5.4.1.0] 2022-11-27, leisure

### Added
- net: Add and document network messages in protocol.h (backport) #2533 (@Pythonix)
- Define MAX_DIGITS_BTC for magic number in BitcoinUnits::format #2555 (@barton2526)
- rpc: Implementation of getmrcinfo #2570 (@jamescowens)
- init: Add init error message if -printtoconsole and -daemon specified simultaneously #2571 (@jamescowens)
- rpc: getmrcinfo part 2 - add calculated minimum fees and fee boosting and by CPID reporting #2575 (@jamescowens)
- fs: fully initialize `_OVERLAPPED` for win32 #2587 (@div72)
- util: Diagnose Lib Version #1 #2573 (@MinaFarhan)
- util: Implement core diagnostics #2 (@jamescowens)
- util: modify Win32LockedPageAllocator to query windows for limit. #2536 (@div72)
- gui, voting: Implement information for wallet holder's votes on poll info cards #2605 (@jamescowens)

### Changed
- scripted-diff: Drop Darwin version for better maintainability #2557 (@barton2526)
- build: Require gcc8 on Ubuntu Bionic to enable C++17 features #2579 (@barton2526)
- util: Replace use of locale dependent atoi(…) with locale-independent std::from_chars(…) (C++17) #2564 (@barton2526)
- translation: Translation updates #2581 (@jamescowens)
- depends: update urls for dmg tools #2583 (@div72)
- Use ReadLE64 in uint256::GetUint64 instead of duplicating logic #2586 (@div72)
- util: Make Parse{Int,UInt}{32,64} use locale independent std::from_chars(…) (C++17) instead of locale dependent strto{l,ll,ul,ull} #2592 (@barton2526)
- build: don't set PORT=no in config.site #2593 (@barton2526)
- build: Replace `which` command with `command -v` #2595 (@barton2526)
- build: update ax_cxx_compile_stdcxx to serial 14 #2596 (@barton2526)
- gui: Changed the unlocked for staking only icons to green #2598 (@delta1513)
- gui: Translation updates #2599 (@jamescowens)
- build: update CI for linter and actions version #2606 (@jamescowens)
- gui: Update translations #2608 (@jamescowens)

### Removed
- refactor: remove unused c-string variant of atoi64() #2562 (@barton2526)
- refactor: Remove unused CDataStream::rdbuf method #2585 (@div72)

### Fixed
- net: Fix some benign races (backport) #2532 (@Pythonix)
- rpc: fix invalid parameter error codes for {sign,verify}message RPCs #2556 (@barton2526)
- build: Fix x86_64 <-> arm64 cross-compiling for macOS #2560 (@barton2526)
- rpc, mrc: Fix field name and initialization of mrc_fees_to_staker #2567 (@jamescowens)
- gui: Add missing resizeTableColumns to fix send address book column widths #2569 (@jamescowens)
- accrual: rebuild snapshot registry on corruption instead of crashing #2577 (@div72)
- doc: Fix link to MurmurHash3.cpp (moved from Google Code to Github) #2584 (@div72)
- fix help text for `revokebeacon` command #2591 (@Pythonix)
- util: Fix spelling error in gridcoinresearchd.cpp #2590 (@jamescowens)
- depends: always use correct ar for win qt build #2588 (@div72)
- util: Fix some bugs due to new implementation and change in BOINC dir handling (@jamescowens)
- util: Diagnose lib - Implement changes to solve crash on some Boost 1.66 machines #2597 (@jamescowens)
- contrib: Check for `patch` command, Check for `wget` command #2594 (@barton2526)
- build: Check std::system for -[alert|block|wallet]notify #2582 (@barton2526)
- gui: Changed the wording on the tooltip for the address book #2602 (@delta1513)
- build: pass win32-dll to LT_INIT() #2601 (@barton2526)
- build: minor cleanups to native_clang package #2600 (@barton2526)
- util: restore translations to diagnostics #2603 (@jamescowens)
- refactor: Fix problems found by valgrind #2607 (@jamescowens)

## [5.4.0.0] 2022-08-01, mandatory, "Kermit's Mom"

### Added
Expand Down Expand Up @@ -1040,7 +1095,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
Fork is set to trigger at block 1420000.
- Raise coinstake output count limit to 8 #1261 (@tomasbrod).
- Port of Bitcoin hash implementation #1208 (@jamescowens).
- Minor canges for the build documentation #1091 (@Lenni).
- Minor changes for the build documentation #1091 (@Lenni).
- Allow sendmany to be used without an account specified #1158 (@Foggyx420).
### Fixed
- Fix `cpids` and `validcpids` not returning the correct data #1233
Expand Down Expand Up @@ -1074,7 +1129,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
- Compatibility with boost-1.67 (@denravonska)
- Calculations to reduce network time offset (@jamescowens)
- Feedback for addnode RPC command (@tomasbrod)
- Added data acquisiton commands (@tomasbrod):
- Added data acquisition commands (@tomasbrod):
- getrecentblocks
- exportstats1
- getsupervotes
Expand Down Expand Up @@ -1409,7 +1464,7 @@ Internal test version used to sort out the forks.

### Fixed
- High CPU usage #349 (@tomasbrod)
- Repetetive block signing #295 (@tomasbrod)
- Repetitive block signing #295 (@tomasbrod)
- Staking creates 1 cent output #311 (@tomasbrod)
- Client no longer has to be restarted for a beacon to activate #253
(@Foggyx420).
Expand Down
65 changes: 54 additions & 11 deletions build-aux/m4/ax_cxx_compile_stdcxx.m4
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
#
# Check for baseline language coverage in the compiler for the specified
# version of the C++ standard. If necessary, add switches to CXX and
# CXXCPP to enable support. VERSION may be '11' (for the C++11 standard)
# or '14' (for the C++14 standard).
# CXXCPP to enable support. VERSION may be '11', '14', '17', or '20' for
# the respective C++ standard version.
#
# The second argument, if specified, indicates whether you insist on an
# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
Expand All @@ -36,13 +36,14 @@
# Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com>
# Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com>
# Copyright (c) 2020 Jason Merrill <jason@redhat.com>
# Copyright (c) 2021 Jörn Heusipp <osmanx@problemloesungsmaschine.de>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved. This file is offered as-is, without any
# warranty.

#serial 12
#serial 14

dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
dnl (serial version number 13).
Expand All @@ -51,6 +52,7 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"],
[$1], [14], [ax_cxx_compile_alternatives="14 1y"],
[$1], [17], [ax_cxx_compile_alternatives="17 1z"],
[$1], [20], [ax_cxx_compile_alternatives="20"],
[m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
m4_if([$2], [], [],
[$2], [ext], [],
Expand All @@ -69,12 +71,12 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
[AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
[ax_cv_cxx_compile_cxx$1=yes],
[ax_cv_cxx_compile_cxx$1=no])])
if test "$ax_cv_cxx_compile_cxx$1" = "yes"; then
if test x$ax_cv_cxx_compile_cxx$1 = xyes; then
ac_success=yes
fi])
m4_if([$2], [noext], [], [dnl
if test "$ac_success" = "no"; then
if test x$ac_success = xno; then
for alternative in ${ax_cxx_compile_alternatives}; do
switch="-std=gnu++${alternative}"
cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
Expand All @@ -98,7 +100,7 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
fi])
m4_if([$2], [ext], [], [dnl
if test "$ac_success" = "no"; then
if test x$ac_success = xno; then
dnl HP's aCC needs +std=c++11 according to:
dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf
dnl Cray's crayCC needs "-h std=c++11"
Expand All @@ -122,18 +124,18 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
break
fi
done
if test "$ac_success" = "yes"; then
if test x$ac_success = xyes; then
break
fi
done
fi])
AC_LANG_POP([C++])
if test "$ax_cxx_compile_cxx$1_required" = "true"; then
if test "$ac_success" = "no"; then
if test x$ax_cxx_compile_cxx$1_required = xtrue; then
if test x$ac_success = xno; then
AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.])
fi
fi
if test "$ac_success" = "no"; then
if test x$ac_success = xno; then
HAVE_CXX$1=0
AC_MSG_NOTICE([No compiler with C++$1 support was found])
else
Expand All @@ -151,20 +153,31 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11],
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
)


dnl Test body for checking C++14 support

m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
)

dnl Test body for checking C++17 support

m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17],
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
_AX_CXX_COMPILE_STDCXX_testbody_new_in_17
)

dnl Test body for checking C++20 support

m4_define([_AX_CXX_COMPILE_STDCXX_testbody_20],
_AX_CXX_COMPILE_STDCXX_testbody_new_in_11
_AX_CXX_COMPILE_STDCXX_testbody_new_in_14
_AX_CXX_COMPILE_STDCXX_testbody_new_in_17
_AX_CXX_COMPILE_STDCXX_testbody_new_in_20
)


dnl Tests for new features in C++11

m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
Expand Down Expand Up @@ -960,3 +973,33 @@ namespace cxx17
#endif // __cplusplus < 201703L
]])


dnl Tests for new features in C++20

m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_20], [[
#ifndef __cplusplus
#error "This is not a C++ compiler"
#elif __cplusplus < 202002L
#error "This is not a C++20 compiler"
#else
#include <version>
namespace cxx20
{
// As C++20 supports feature test macros in the standard, there is no
// immediate need to actually test for feature availability on the
// Autoconf side.
} // namespace cxx20
#endif // __cplusplus < 202002L
]])
2 changes: 1 addition & 1 deletion cd/00_setup_env_mac.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export LC_ALL=C.UTF-8

export CONTAINER_NAME=ci_macos_cross
export DOCKER_NAME_TAG=ubuntu:20.04
export HOST=x86_64-apple-darwin18
export HOST=x86_64-apple-darwin
export PACKAGES="cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools libtinfo5 python3-dev python3-setuptools xorriso"
export XCODE_VERSION=12.1
export XCODE_BUILD_ID=12A7403
Expand Down
8 changes: 4 additions & 4 deletions ci/lint/04_install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@

export LC_ALL=C

./ci/retry/retry sudo apt update && sudo apt install -y clang-format-9
sudo update-alternatives --install /usr/bin/clang-format clang-format $(which clang-format-9 ) 100
sudo update-alternatives --install /usr/bin/clang-format-diff clang-format-diff $(which clang-format-diff-9) 100
./ci/retry/retry sudo apt update && sudo apt install -y clang-format-14
sudo update-alternatives --install /usr/bin/clang-format clang-format $(which clang-format-14 ) 100
sudo update-alternatives --install /usr/bin/clang-format-diff clang-format-diff $(which clang-format-diff-14) 100

./ci/retry/retry pip3 install codespell==2.1.0
./ci/retry/retry pip3 install codespell==2.2.2
./ci/retry/retry pip3 install flake8==4.0.1
./ci/retry/retry pip3 install mypy==0.942
./ci/retry/retry pip3 install vulture==2.3
Expand Down
2 changes: 1 addition & 1 deletion ci/test/00_setup_env_mac.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export LC_ALL=C.UTF-8

export CONTAINER_NAME=ci_macos_cross
export DOCKER_NAME_TAG=ubuntu:20.04 # Check that Focal can cross-compile to macos
export HOST=x86_64-apple-darwin18
export HOST=x86_64-apple-darwin
export PACKAGES="cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools libtinfo5 python3-dev python3-setuptools xorriso"
export XCODE_VERSION=12.1
export XCODE_BUILD_ID=12A7403
Expand Down
2 changes: 1 addition & 1 deletion ci/test/00_setup_env_mac_host.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

export LC_ALL=C.UTF-8

export HOST=x86_64-apple-darwin18
export HOST=x86_64-apple-darwin
export GOAL="install"
# We run the contrib/install_db4.sh script rather than installing the
# Homebrew berkeley-db4 formula to add the Berkeley DB 4.8 dependency
Expand Down
4 changes: 2 additions & 2 deletions ci/test/00_setup_env_native_old.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ export LC_ALL=C.UTF-8

export CONTAINER_NAME=ci_native_old
export DOCKER_NAME_TAG=ubuntu:18.04
export PACKAGES="libqt5gui5 libqt5core5a qtbase5-dev libqt5dbus5 qttools5-dev qttools5-dev-tools libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-iostreams-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev libqrencode-dev libzip-dev zlib1g zlib1g-dev libcurl4-openssl-dev"
export PACKAGES="gcc-8 g++-8 libqt5gui5 libqt5core5a qtbase5-dev libqt5dbus5 qttools5-dev qttools5-dev-tools libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-iostreams-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev libqrencode-dev libzip-dev zlib1g zlib1g-dev libcurl4-openssl-dev"
export RUN_UNIT_TESTS=true
# export RUN_FUNCTIONAL_TESTS=false
# export RUN_SECURITY_TESTS="true"
export GOAL="install"
export GRIDCOIN_CONFIG="--enable-reduce-exports --with-incompatible-bdb --with-gui=qt5"
export GRIDCOIN_CONFIG="--enable-reduce-exports --with-incompatible-bdb --with-gui=qt5 CC=gcc-8 CXX=g++-8"
export NEED_XVFB="true"
export NO_DEPENDS=1
29 changes: 27 additions & 2 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
AC_PREREQ([2.60])
define(_CLIENT_VERSION_MAJOR, 5)
define(_CLIENT_VERSION_MINOR, 4)
define(_CLIENT_VERSION_REVISION, 0)
define(_CLIENT_VERSION_REVISION, 1)
define(_CLIENT_VERSION_BUILD, 0)
define(_CLIENT_VERSION_IS_RELEASE, true)
define(_COPYRIGHT_YEAR, 2022)
Expand Down Expand Up @@ -75,7 +75,7 @@ AC_PROG_OBJCXX
])

dnl Libtool init checks.
LT_INIT([pic-only])
LT_INIT([pic-only win32-dll])

dnl Check/return PATH for base programs.
AC_PATH_TOOL(AR, ar)
Expand Down Expand Up @@ -768,6 +768,31 @@ AC_LINK_IFELSE([AC_LANG_SOURCE([
]
)

have_any_system=no
AC_MSG_CHECKING([for std::system])
AC_LINK_IFELSE(
[ AC_LANG_PROGRAM(
[[ #include <cstdlib> ]],
[[ int nErr = std::system(""); ]]
)],
[ AC_MSG_RESULT(yes); have_any_system=yes],
[ AC_MSG_RESULT(no) ]
)

AC_MSG_CHECKING([for ::_wsystem])
AC_LINK_IFELSE(
[ AC_LANG_PROGRAM(
[[ ]],
[[ int nErr = ::_wsystem(""); ]]
)],
[ AC_MSG_RESULT(yes); have_any_system=yes],
[ AC_MSG_RESULT(no) ]
)

if test "x$have_any_system" != "xno"; then
AC_DEFINE(HAVE_SYSTEM, 1, Define to 1 if std::system or ::wsystem is available.)
fi

dnl Our minimum supported glibc is 2.17, however support for thread_local
dnl did not arrive in glibc until 2.18.
if test "$use_thread_local" = "yes" || test "$use_thread_local" = "auto"; then
Expand Down

0 comments on commit 6a4285a

Please sign in to comment.