Edit >> Settings "Segmentation Fault" Init fresh SD wallet Connection Error on startup. #20

Closed
opened 3 years ago by oDinZu · 12 comments
oDinZu commented 3 years ago

**General: **

On launch of SD, it says connection error, then says edit user/pass in edit >> settings...I goto settings and the application crashes.

Connection Error

Terminal Logs:

QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open
Verifying sapling param files exist
Found params in .
QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open
QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open
QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open
QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open
QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open
QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open
Verifying sapling param files exist
Found params in .
QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open
QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open
QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open
RPC: "getinfo" QJsonValue(object, QJsonObject({"id":"someid","jsonrpc":"1.0","method":"getinfo"}))
QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open
slot_change_currency
Refreshing price stats after currency change
Segmentation fault (core dumped)

gdb bt logs:

Thread 1 "silentdragon" received signal SIGSEGV, Segmentation fault.
std::__shared_ptr<ConnectionConfig, (__gnu_cxx::_Lock_policy)2>::get (this=0x10)
    at /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/shared_ptr_base.h:1310
1310	      { return _M_ptr; }
(gdb) bt
#0  std::__shared_ptr<ConnectionConfig, (__gnu_cxx::_Lock_policy)2>::get() const (this=0x10)
    at /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/shared_ptr_base.h:1310
#1  0x00000000004645a8 in std::__shared_ptr_access<ConnectionConfig, (__gnu_cxx::_Lock_policy)2, false, false>::_M_get() const (this=0x10)
    at /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/shared_ptr_base.h:1021
#2  0x000000000045c465 in std::__shared_ptr_access<ConnectionConfig, (__gnu_cxx::_Lock_policy)2, false, false>::operator->() const (this=0x10)
    at /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/shared_ptr_base.h:1015
#3  0x000000000042f361 in MainWindow::setupSettingsModal()::$_6::operator()() const (this=0xc2a170) at src/mainwindow.cpp:349
#4  0x000000000042ead9 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, MainWindow::setupSettingsModal()::$_6>::call(MainWindow::setupSettingsModal()::$_6&, void**) (f=..., arg=0x7fffffffc220) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:146
#5  0x000000000042eab1 in QtPrivate::Functor<MainWindow::setupSettingsModal()::$_6, 0>::call<QtPrivate::List<>, void>(MainWindow::setupSettingsModal()::$_6&, void*, void**) (f=..., arg=0x7fffffffc220) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:256
#6  0x000000000042ea5c in QtPrivate::QFunctorSlotObject<MainWindow::setupSettingsModal()::$_6, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0xc2a160, r=0x101cde0, a=0x7fffffffc220, ret=0x0) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:439
#7  0x00007ffff6e9a458 in QMetaObject::activate(QObject*, int, int, void**) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#8  0x00007ffff7a783e6 in QAction::triggered(bool) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#9  0x00007ffff7a7aaa2 in QAction::activate(QAction::ActionEvent) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#10 0x00007ffff7c00d12 in  () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#11 0x00007ffff7c084ae in  () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#12 0x00007ffff7c094d2 in QMenu::mouseReleaseEvent(QMouseEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#13 0x00007ffff7ac12b6 in QWidget::event(QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
--Type <RET> for more, q to quit, c to continue without paging--
#14 0x00007ffff7c0badb in QMenu::event(QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#15 0x00007ffff7a7ea66 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#16 0x00007ffff7a88343 in QApplication::notify(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#17 0x00007ffff6e6e93a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#18 0x00007ffff7a87457 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool, bool) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#19 0x00007ffff7addce4 in  () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#20 0x00007ffff7ae01ec in  () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#21 0x00007ffff7a7ea66 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#22 0x00007ffff7a880f0 in QApplication::notify(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#23 0x00007ffff6e6e93a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#24 0x00007ffff744f7d3 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) ()
    at /lib/x86_64-linux-gnu/libQt5Gui.so.5
#25 0x00007ffff745110b in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) ()
    at /lib/x86_64-linux-gnu/libQt5Gui.so.5
#26 0x00007ffff742b35b in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
    at /lib/x86_64-linux-gnu/libQt5Gui.so.5
#27 0x00007ffff2f2132e in  () at /lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#28 0x00007ffff5e4517d in g_main_context_dispatch () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#29 0x00007ffff5e45400 in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#30 0x00007ffff5e454a3 in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#31 0x00007ffff6ec6565 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#32 0x00007ffff6e6d4db in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#33 0x00007ffff6e75246 in QCoreApplication::exec() () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#34 0x000000000041ed91 in Application::main(int, char**) (this=0x7fffffffdeb8, argc=1, argv=0x7fffffffdfd8) at src/main.cpp:248
#35 0x000000000041dd66 in main(int, char**) (argc=1, argv=0x7fffffffdfd8) at src/main.cpp:290
**General: ** On launch of SD, it says connection error, then says edit user/pass in edit >> settings...I goto settings and the application crashes. ![Connection Error](https://git.hush.is/attachments/79f74d40-6b76-4ed1-be96-b436fe2fc925) **Terminal Logs:** ``` QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open Verifying sapling param files exist Found params in . QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open Verifying sapling param files exist Found params in . QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open RPC: "getinfo" QJsonValue(object, QJsonObject({"id":"someid","jsonrpc":"1.0","method":"getinfo"})) QIODevice::write (QFile, "/home/username/.local/share/Hush/SilentDragon/SilentDragon.log"): device not open slot_change_currency Refreshing price stats after currency change Segmentation fault (core dumped) ``` **gdb bt logs:** ``` Thread 1 "silentdragon" received signal SIGSEGV, Segmentation fault. std::__shared_ptr<ConnectionConfig, (__gnu_cxx::_Lock_policy)2>::get (this=0x10) at /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/shared_ptr_base.h:1310 1310 { return _M_ptr; } (gdb) bt #0 std::__shared_ptr<ConnectionConfig, (__gnu_cxx::_Lock_policy)2>::get() const (this=0x10) at /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/shared_ptr_base.h:1310 #1 0x00000000004645a8 in std::__shared_ptr_access<ConnectionConfig, (__gnu_cxx::_Lock_policy)2, false, false>::_M_get() const (this=0x10) at /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/shared_ptr_base.h:1021 #2 0x000000000045c465 in std::__shared_ptr_access<ConnectionConfig, (__gnu_cxx::_Lock_policy)2, false, false>::operator->() const (this=0x10) at /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/shared_ptr_base.h:1015 #3 0x000000000042f361 in MainWindow::setupSettingsModal()::$_6::operator()() const (this=0xc2a170) at src/mainwindow.cpp:349 #4 0x000000000042ead9 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, MainWindow::setupSettingsModal()::$_6>::call(MainWindow::setupSettingsModal()::$_6&, void**) (f=..., arg=0x7fffffffc220) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:146 #5 0x000000000042eab1 in QtPrivate::Functor<MainWindow::setupSettingsModal()::$_6, 0>::call<QtPrivate::List<>, void>(MainWindow::setupSettingsModal()::$_6&, void*, void**) (f=..., arg=0x7fffffffc220) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:256 #6 0x000000000042ea5c in QtPrivate::QFunctorSlotObject<MainWindow::setupSettingsModal()::$_6, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0xc2a160, r=0x101cde0, a=0x7fffffffc220, ret=0x0) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:439 #7 0x00007ffff6e9a458 in QMetaObject::activate(QObject*, int, int, void**) () at /lib/x86_64-linux-gnu/libQt5Core.so.5 #8 0x00007ffff7a783e6 in QAction::triggered(bool) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #9 0x00007ffff7a7aaa2 in QAction::activate(QAction::ActionEvent) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #10 0x00007ffff7c00d12 in () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #11 0x00007ffff7c084ae in () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #12 0x00007ffff7c094d2 in QMenu::mouseReleaseEvent(QMouseEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #13 0x00007ffff7ac12b6 in QWidget::event(QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5 --Type <RET> for more, q to quit, c to continue without paging-- #14 0x00007ffff7c0badb in QMenu::event(QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #15 0x00007ffff7a7ea66 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #16 0x00007ffff7a88343 in QApplication::notify(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #17 0x00007ffff6e6e93a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Core.so.5 #18 0x00007ffff7a87457 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool, bool) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #19 0x00007ffff7addce4 in () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #20 0x00007ffff7ae01ec in () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #21 0x00007ffff7a7ea66 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #22 0x00007ffff7a880f0 in QApplication::notify(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #23 0x00007ffff6e6e93a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Core.so.5 #24 0x00007ffff744f7d3 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () at /lib/x86_64-linux-gnu/libQt5Gui.so.5 #25 0x00007ffff745110b in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () at /lib/x86_64-linux-gnu/libQt5Gui.so.5 #26 0x00007ffff742b35b in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib/x86_64-linux-gnu/libQt5Gui.so.5 #27 0x00007ffff2f2132e in () at /lib/x86_64-linux-gnu/libQt5XcbQpa.so.5 #28 0x00007ffff5e4517d in g_main_context_dispatch () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #29 0x00007ffff5e45400 in () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #30 0x00007ffff5e454a3 in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0 #31 0x00007ffff6ec6565 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib/x86_64-linux-gnu/libQt5Core.so.5 #32 0x00007ffff6e6d4db in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib/x86_64-linux-gnu/libQt5Core.so.5 #33 0x00007ffff6e75246 in QCoreApplication::exec() () at /lib/x86_64-linux-gnu/libQt5Core.so.5 #34 0x000000000041ed91 in Application::main(int, char**) (this=0x7fffffffdeb8, argc=1, argv=0x7fffffffdfd8) at src/main.cpp:248 #35 0x000000000041dd66 in main(int, char**) (argc=1, argv=0x7fffffffdfd8) at src/main.cpp:290 ```
Owner

@oDinZu looks like a valid bug.

Something is wrong with /home/username/.local/share/Hush/SilentDragon/, does the directory exist?

@oDinZu looks like a valid bug. Something is wrong with `/home/username/.local/share/Hush/SilentDragon/`, does the directory exist?
Poster

Sweet! I found the sd.debug file with your guidance and it is why SD doesn't work. It is looking for the .komodo directory and I am using hush3:dev.

On init of SD:

15.08.2021 18:23:07 Found Hush params directory at /home/username/.zcash-params
15.08.2021 18:23:07 Found HUSH3.conf at /home/username/.komodo/HUSH3/HUSH3.conf
15.08.2021 18:23:07 Attempting autoconnect
15.08.2021 18:23:07 refreshing state
15.08.2021 18:23:07 Authentication failed
Sweet! I found the sd.debug file with your guidance and it is why SD doesn't work. It is looking for the .komodo directory and I am using hush3:dev. On init of SD: ``` 15.08.2021 18:23:07 Found Hush params directory at /home/username/.zcash-params 15.08.2021 18:23:07 Found HUSH3.conf at /home/username/.komodo/HUSH3/HUSH3.conf 15.08.2021 18:23:07 Attempting autoconnect 15.08.2021 18:23:07 refreshing state 15.08.2021 18:23:07 Authentication failed ```
Owner

@odzinzu good find, SD+SDL server have not yet been updated to work with dev branch. I will add comments to your other PR

@odzinzu good find, SD+SDL server have not yet been updated to work with `dev` branch. I will add comments to your other PR
Owner

@oDinZu can you recheck this with hushd 3.9.0 and SD dev branch and close it if it's no longer relevant? Thanks

@oDinZu can you recheck this with hushd 3.9.0 and SD `dev` branch and close it if it's no longer relevant? Thanks
oDinZu was assigned by duke 3 years ago
Owner

@oDinZu plz let me know if you still see problems. hushd 3.9.0 and dev branch is now compatible with SD dev branch, we could use more testing before 1.3.0 release

@oDinZu plz let me know if you still see problems. `hushd` 3.9.0 and `dev` branch is now compatible with SD `dev` branch, we could use more testing before 1.3.0 release
Poster

On a fresh build of SD, this problem is solved.

I had a similar problem just now on master SD branch and seen you updated it. 😺

On building SD:dev and launching the application on my RPi v8 ARM, no errors or segmentation faults.

I have connected to peers and everything seems to work. I am able to goto edit >> settings without crashing the application.

On a fresh build of SD, this problem is solved. I had a similar problem just now on master SD branch and seen you updated it. 😺 On building SD:dev and launching the application on my RPi v8 ARM, no errors or segmentation faults. I have connected to peers and everything seems to work. I am able to goto edit >> settings without crashing the application.
Owner

Ok, closing for now

Ok, closing for now
duke closed this issue 3 years ago
Poster

On my newly born Qt5.15.2 bins for SD Ubuntu 18.04, I receive the segmentation fault on both: master and dev for SilentDragon fresh installs.

Init SD looks like this on 18.04 Ubuntu.

On my newly born Qt5.15.2 bins for SD Ubuntu 18.04, I receive the segmentation fault on both: master and dev for SilentDragon fresh installs. Init SD looks like this on 18.04 Ubuntu.
Poster

Going to GUI edit >> settings >> Segmentation fault (core dumped)

username@pcname:~/Apps/SilentDragon$ ./silentdragon 
Loading locale  "en"
Setting up market tab
Could not find volume of "hush" !!!
Could not find volume of "btc" !!!
Could not find volume of "btc" !!!
setupPeersTab
set animation
RPC Done settings up TableModels
RPC : started price refresh at speed= 900000
RPC Done settings up all timers
Created RPC
Verifying sapling param files exist
Found params in .
RPC: "getinfo" QJsonValue(object, QJsonObject({"id":"someid","jsonrpc":"1.0","method":"getinfo"}))
Can't find hushd at  "/home/username/Apps/SilentDragon/hushd"
Verifying sapling param files exist
Found params in .
RPC: "getinfo" QJsonValue(object, QJsonObject({"id":"someid","jsonrpc":"1.0","method":"getinfo"}))
slot_change_currency
Refreshing price stats after currency change
Segmentation fault (core dumped)
Going to GUI **edit >> settings** >> **Segmentation fault (core dumped)** ``` username@pcname:~/Apps/SilentDragon$ ./silentdragon Loading locale "en" Setting up market tab Could not find volume of "hush" !!! Could not find volume of "btc" !!! Could not find volume of "btc" !!! setupPeersTab set animation RPC Done settings up TableModels RPC : started price refresh at speed= 900000 RPC Done settings up all timers Created RPC Verifying sapling param files exist Found params in . RPC: "getinfo" QJsonValue(object, QJsonObject({"id":"someid","jsonrpc":"1.0","method":"getinfo"})) Can't find hushd at "/home/username/Apps/SilentDragon/hushd" Verifying sapling param files exist Found params in . RPC: "getinfo" QJsonValue(object, QJsonObject({"id":"someid","jsonrpc":"1.0","method":"getinfo"})) slot_change_currency Refreshing price stats after currency change Segmentation fault (core dumped) ```
Owner

@odinzu that last debug output helped, my current guess is now that price stats has code which lacks error checking. Is there any way that this machine was disallowed to connect to port 443 of a host, maybe by a VM network filter?

@odinzu that last debug output helped, my current guess is now that price stats has code which lacks error checking. Is there any way that this machine was disallowed to connect to port 443 of a host, maybe by a VM network filter?
Owner

@odinzu if you are able to get a coredump and provide a backtrace, that would also be helpful

@odinzu if you are able to get a coredump and provide a backtrace, that would also be helpful
Owner

@odzinu I added a bit more logging on dev branch if you want to run with that, that will help pinpoint the issue a bit more

@odzinu I added a bit more logging on `dev` branch if you want to run with that, that will help pinpoint the issue a bit more
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.